【发布时间】:2015-11-12 17:59:39
【问题描述】:
我有一个控制一些工业流程的应用程序。其中一些进程非常耗时,因此应用程序会创建一个工作线程来运行它们。线程设置为可取消并报告进度。
CertifyBWThread.WorkerSupportsCancellation = true;
// this allows the worker to report progress during work
CertifyBWThread.WorkerReportsProgress = true;
提供了一个按钮,用于在线程正常完成之前取消线程。
if (CertifyBWThread != null)
{
CertifyBWThread.CancelAsync();
}
当线程运行时,它会定期检查是否已安排取消。 args 是 DoWorkEventArgs 。
//check for cancellation here
if (CertifyBWThread.CancellationPending)
{
args.Cancel = true;
}
...我经常在调试器中点击这段代码。一旦我调用了 CancelAsync(),它每次都会通过一个控制工业流程并将 args.Cancel 设置为 true 的循环来实现这一点。但仍然很高兴线程运行。当 args.Cancel 设置为 true 时应该发生什么?
【问题讨论】:
-
工作线程需要检查
CancellationPending来确定它是否应该停止并退出。 -
@Ron Beyer 我不是在代码中显示了吗?
-
该代码中是否缺少
return?是的。 -
@usr 它已发布 - 你没有看到评论说“//检查此处未决的取消”的代码。正如我所说,在调试器中它确实执行了将取消设置为 true 的行。
标签: c# multithreading