【问题标题】:BackGroundWorker Thread when Application is Closed应用程序关闭时的BackGroundWorker线程
【发布时间】:2013-07-26 09:12:06
【问题描述】:

这是我的场景:-

我有一个 BackGroundWorker 线程,它订阅了 2 个事件 DoWork 和 RunWorkerCompleted 。我正在做的是在 DoWork 事件中我正在做计时任务并更新正在使用 MainThread 和 RunWorkerComplete 启动加载器的 UI 我正在更新我的 UI即停止加载程序。

现在我想确保当我的应用程序在 BackgroundWorker 处于打开状态时终止时,加载器正在旋转。我想确保它杀死 BakcgroundWorker 线程或至少应用程序的终止导致线程安全当 LOADER 开启时。

Dispose 会提供任何帮助吗?或 DynamicGarbageCollection 将在应用程序终止时处理未使用的对象将执行与 Dispose 相同的操作。??

希望我很清楚..我怎样才能做到这一点.??

【问题讨论】:

  • 当您的App Terminates 时,您的后台工作人员无法生存。应用终止是什么意思?
  • 您在寻找CancelAsync吗?当应用程序关闭时,所有后台线程都被释放
  • 不,我不是在寻找 cancelAsync
  • 是的,您正在寻找 CancelAsync。至少实施它是一个很好的预防措施。

标签: c# mvvm backgroundworker


【解决方案1】:

当您的应用程序终止时,bgw 线程本身将停止,但您必须注意不要更新已关闭/关闭表单上的控件。

不要在这里调用 Dispose()。您可以取消后台工作人员,但 DoWork() 中的代码必须遵守。

【讨论】:

  • 在关闭我的应用程序时,我只是在更新我的日志文件。但关键是当微调器仍然打开并且我终止我的应用程序时。这会导致线程安全状态还是我需要小心那个时间点的东西。
  • 取决于很多事情。你的 DoWork 代码应该是防御性的,最好是可停止的。
  • 关于使用 Cancelasync——我遇到了这个异常——这个 BackgroundWorker 声明它不支持取消。修改 WorkerSupportsCancellation 以声明它确实支持取消。
  • 是的,首先将布尔属性WorkerSupportsCancellation 设置为true。并修改 DoWork 代码查看 CancelationPending。
  • cancellationpending 有什么帮助..?
【解决方案2】:

根据定义,后台线程将无法保持主机进程运行(与前台线程相反,例如呈现 UI 组件的线程)。

请参阅 MSDN 文档:http://msdn.microsoft.com/en-us/library/h339syd0.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多