【问题标题】:Canceling BackgroundWorker within the Thread取消线程内的BackgroundWorker
【发布时间】:2010-03-16 13:47:02
【问题描述】:

我有一个使用 BackgroundWorker 和 C# 的运行时间更长的多步骤进程。在继续下一步之前,我需要确保每个步骤都已成功完成。我已经看到很多关于让 BackgroundWorker 捕获错误并通过单击取消按钮取消的参考,但我想自己检查错误,然后优雅地结束该过程。我是像点击取消按钮一样对待它,还是有其他方式?

【问题讨论】:

  • 当您说“我想自己检查错误”时,您的意思是希望 BackgroundWorker 线程自己检查错误吗?并在出错时取消后台任务?
  • 不,例如说数据库中缺少完成这些步骤所需的信息。它不会抛出错误,但如果允许继续,它可能会导致问题。

标签: c# backgroundworker request-cancelling


【解决方案1】:

给定一个BackgroundWorker bgWrk:

发生错误时可以设置bgWrk.Cancel = true;。这样做有以下效果:

然后将CancellationPending 标志切换为true,您可以定期检查后台工作程序,然后适当地取消。据我所知,这将被认为是这样做的“最佳实践”。

然后,如果设置了 CancellationPending 标志,您可以确保不再运行您的代码,并且基本上等待调用者取消。它应该适合您。

【讨论】:

  • 感谢您确认我认为需要做的事情。我只是不想在没有看到是否有不同(或更好)的方法的情况下做出这样的假设。
  • 此外,DoWork 应设置 Args.Canceled=true 以将 Cancel 状态传递给 Completed 事件。
  • 不应该是 bgWrk.CancelAsync() 吗?我在 .NET 3.5 中没有 bgWrk.Cancel
  • Cancel 由 DoWork 事件持有,CancelAsync() 是通过对象(它正在监视以执行取消本身)(和 +1 @Henk)
猜你喜欢
  • 1970-01-01
  • 2015-01-21
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多