如何监控重要的工作者线程

tan*_*ius 5 c# multithreading

我有一个对我的应用程序至关重要的工作线程.
它创建时new Thread( method ).Start();我不加入它,我只是希望只要我的程序运行就会运行.
但是,可能会发生此线程上发生异常; 并且作为一个结果,线程将(除了一些最后的日志记录)关闭.此严重错误无法恢复.由于线程对于应用程序至关重要,因此它也必须关闭.

现在我的问题是:我如何监控线程的状态?

你会

  • 民意调查IsAlive
  • 重新抛出捕获的异常并使用AppDomain.CurrentDomain.UnhandledException
  • 实现一个event会发出后台线程结束的信号?
  • 用a BackgroundWorker,哪个实现RunWorkerCompleted(但是对于长时间运行的线程,BackgroundWorker真的是正确的选择吗?)
  • 一些完全不同的东西?

编辑:
现在,我通过调用Application.Exit()- > 早期和经常崩溃来解决问题.这也是一个选择:)

小智 2

为什么不像这样包装你的主线程例程:

 void ThreadStart()
 {
       try 
       {
            ThreadImplementation();           
       }
       catch (Exception e)
       { 
            mainForm.BeginInvoke(OnBackgroundThreadException, e);
       }
 }
Run Code Online (Sandbox Code Playgroud)

这将确保每当线程异常关闭时您都会在应用程序的主线程上收到消息。您不需要轮询任何内容。当您需要异步与 UI 线程对话时,BackgroundWorker 通常很有用。(IE 进度更新)。