【问题标题】:C# Stop BackgroundWorkerC# 停止 BackgroundWorker
【发布时间】:2011-01-06 18:33:34
【问题描述】:

我对后台工作人员有疑问。

我在后台工作程序中有无限循环。我怎样才能阻止它?

【问题讨论】:

  • 请发布您的工作人员的代码,以便我们更深入地了解问题所在。 (即使您删除代码块并仅显示您在哪里初始化工作人员,您的工作人员正在模糊地在做什么,您当前正在做什么来停止它)。

标签: c# .net multithreading loops backgroundworker


【解决方案1】:

将其更改为非无限循环。

BackgroundWorker 内置了对取消的支持。取消后台工作人员呼叫BackgroundWorker.CancelAsync。您还需要修改工作人员代码以检查文档中提到的取消:

CancelAsync 提交终止挂起后台操作的请求并将 CancellationPending 属性设置为 true。

当您调用 CancelAsync 时,您的工作方法有机会停止其执行并退出。工作人员代码应定期检查 CancellationPending 属性以查看它是否已设置为 true。

例如,如果您的工作线程中有这个无限循环:

while (true)
{
    ...
}

那么您可以将其更改为:

while (!backgroundWorker.CancellationPending)
{
    ...
}

要使取消生效,您还需要将属性 BackgroundWorker.WorkerSupportsCancellation 设置为 true。这可以在设计器中完成。

【讨论】:

    猜你喜欢
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多