使用英语阅读

通过


AsyncOperation.Post(SendOrPostCallback, Object) 方法

定义

在适合于应用程序模型的线程或上下文中调用委托。

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

参数

d
SendOrPostCallback

一个用于包装操作结束时要调用的委托的 SendOrPostCallback 对象。

arg
Object

d 参数中包含的委托的一个自变量。

例外

dnull

示例

下面的代码示例演示如何使用 Post 方法来报告异步操作的进度和增量结果。 此代码示例是为 System.ComponentModel.AsyncOperationManager 类提供的一个更大示例的一部分。

// 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 而不会结束异步操作的生存期。

在异步操作的生存期尚未通过调用 PostOperationCompleted结束时,可以Post随心所想地调用 方法。 可以使用 方法向客户端报告进度或中间结果。

当您 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

另请参阅