如何通知正在运行的线程应用程序将在.net中关闭?

时间:2012-07-03 03:04:30

标签: c# multithreading

我有一个要求,我需要在辅助线程(长时间运行的进程)中运行一个方法,当应用程序正常/异常关闭时,我需要存储辅助线程方法的信息处理的程度。

因此,当下一个应用程序启动时,我需要从停止的那一点开始辅助线程的方法。

问题:

  1. 我们怎样才能实现它?
  2. 如何关闭应用程序要关闭的线程?

3 个答案:

答案 0 :(得分:2)

我想最好的方法是定期保存辅助线程的进度(到磁盘......),并在重新启动应用程序(和你的线程)时从上次保存的点恢复。

对我来说,其他任何方式看起来都像是木头,很难实现和调试。

答案 1 :(得分:1)

在辅助线程中,您可以在技术上与AppDomain.ProcessExitAppDomain.UnhandledException事件相关联。

但值得注意的是,这两件事都是最后一次机会类型的事件,对他们有一些警告。在使用它们之前,必须仔细阅读每个事件的MSDN文档。

答案 2 :(得分:1)

听起来你的问题是使用BackgroundWorker的候选人。它提供进度和取消通知。有关示例,请参阅BackgroundWorker文档。

当您启动或检测到应用程序将要关闭时,您可以在后台工作程序实例上调用CancelAsync。在BackgroundWorker.DoWork事件的处理程序内,您可以定期检查事件args以查看是否请求取消。