【发布时间】:2011-01-06 18:33:34
【问题描述】:
我对后台工作人员有疑问。
我在后台工作程序中有无限循环。我怎样才能阻止它?
【问题讨论】:
-
请发布您的工作人员的代码,以便我们更深入地了解问题所在。 (即使您删除代码块并仅显示您在哪里初始化工作人员,您的工作人员正在模糊地在做什么,您当前正在做什么来停止它)。
标签: c# .net multithreading loops backgroundworker
我对后台工作人员有疑问。
我在后台工作程序中有无限循环。我怎样才能阻止它?
【问题讨论】:
标签: c# .net multithreading loops backgroundworker
将其更改为非无限循环。
BackgroundWorker 内置了对取消的支持。取消后台工作人员呼叫BackgroundWorker.CancelAsync。您还需要修改工作人员代码以检查文档中提到的取消:
CancelAsync 提交终止挂起后台操作的请求并将 CancellationPending 属性设置为 true。
当您调用 CancelAsync 时,您的工作方法有机会停止其执行并退出。工作人员代码应定期检查 CancellationPending 属性以查看它是否已设置为 true。
例如,如果您的工作线程中有这个无限循环:
while (true)
{
...
}
那么您可以将其更改为:
while (!backgroundWorker.CancellationPending)
{
...
}
要使取消生效,您还需要将属性 BackgroundWorker.WorkerSupportsCancellation 设置为 true。这可以在设计器中完成。
【讨论】: