WPF中的BackgroundWorker.RunWorkerCompleted事件

时间:2012-08-31 21:03:06

标签: backgroundworker

有一种情况是用户终止应用程序,而它仍在通过BackgroundWorker处理数据。 我想发送取消或终止命令到这个方法。我尝试调用CancelAsync()方法,但它显然不能按我预期的方式工作,工作人员仍然继续处理。 什么是向BackgroundWorker发出信号的好方法,特别是其RunWorkerCompleted方法停止处理? 我必须使用状态变量吗?

1 个答案:

答案 0 :(得分:0)

这是在BackgroundWorker上调用CancelAsync()时执行的代码

public void CancelAsync()
{
    if (!this.WorkerSupportsCancellation)
    {
        throw new InvalidOperationException(SR.GetString
                 ("BackgroundWorker_WorkerDoesntSupportCancellation"));
    }
    this.cancellationPending = true;
}

如您所见,他们在检查cancellationPending的值后将内部WorkerSupportsCancellation变量设置为true。

因此,当您退出应用程序调用{​​{1}}并在DoWork或RunWorkerCompleted内部测试CancellationPending时,您需要设置WorkerSupportsCancellation = true;。如果这是真的停止你的过程。