AsyncOperation.Post(SendOrPostCallback, Object) 方法

定義

在適合應用程式模型的執行緒或內容上叫用委派。

C#
public void Post (System.Threading.SendOrPostCallback d, object arg);
C#
public void Post (System.Threading.SendOrPostCallback d, object? arg);

參數

d
SendOrPostCallback

SendOrPostCallback 物件,包裝作業結束時要呼叫的委派。

arg
Object

包含在 d 參數中的委派引數。

例外狀況

dnull

範例

下列程式代碼範例示範如何使用 Post 方法來報告異步操作的進度和累加結果。 此程式代碼範例是針對 類別提供的較大範例的 System.ComponentModel.AsyncOperationManager 一部分。

C#
// This method computes the list of prime numbers used by the
// IsPrime method.
private ArrayList BuildPrimeNumberList(
    int numberToTest,
    AsyncOperation asyncOp)
{
    ProgressChangedEventArgs e = null;
    ArrayList primes = new ArrayList();
    int firstDivisor;
    int n = 5;

    // Add the first prime numbers.
    primes.Add(2);
    primes.Add(3);

    // Do the work.
    while (n < numberToTest && 
           !TaskCanceled( asyncOp.UserSuppliedState ) )
    {
        if (IsPrime(primes, n, out firstDivisor))
        {
            // Report to the client that a prime was found.
            e = new CalculatePrimeProgressChangedEventArgs(
                n,
                (int)((float)n / (float)numberToTest * 100),
                asyncOp.UserSuppliedState);

            asyncOp.Post(this.onProgressReportDelegate, e);

            primes.Add(n);

            // Yield the rest of this time slice.
            Thread.Sleep(0);
        }

        // Skip even numbers.
        n += 2;
    }

    return primes;
}

備註

方法 Post 會叫用 參數指定的 arg 委派,而不會結束異步操作的存留期。

您可以在異步操作的存留期尚未結束時,盡可能常呼叫 PostPostOperationCompleted方法。 您可以使用 方法來將進度或過渡結果回報給用戶端。

當您想要張貼異步工作狀態的更新時,參數會 d 包裝您想要呼叫的委派。 對象 AsyncOperation 可確保您的委派是在適用於應用程式模型的線程或內容上叫用。 您的方法可以選擇性地引發事件,以通知客戶端狀態變更、進度更新或新可用的累加結果。

參數 arg 應該用來將狀態傳遞至參數所包裝的 d 委派。 它可能是的 AsyncOperation參考,或者可能是 System.ComponentModel.ProgressChangedEventArgs 物件。 建議您從 System.ComponentModel.ProgressChangedEventArgs 衍生您自己的類別,以提供額外的狀態記憶體。

給繼承者的注意事項

繼承者必須讓 Post(SendOrPostCallback, Object) 叫用異步,如此一來,如果類別庫提供者假設異步,但特定應用程式模型發生同步,就不需要擔心潛在的堆疊溢位。

注意:主控台應用程式不會同步執行 Post(SendOrPostCallback, Object) 呼叫。 這可能會造成 ProgressChanged 事件不按順序引發。 如果您想要以序列化方式執行 Post(SendOrPostCallback, Object) 呼叫,請實作及安裝 SynchronizationContext 類別。

如需實作異步類別的詳細資訊,請參閱 實作事件架構異步模式

適用於

產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0

另請參閱