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