C# 如何监视重要的辅助线程

C# 如何监视重要的辅助线程,c#,multithreading,C#,Multithreading,我有一个对我的应用程序至关重要的工作线程。 它是用新线程(方法).Start()创建的我不加入它,我只希望它在我的程序运行时运行。 但是,在这个线程上可能捕获到异常;因此,线程将(除了最后的一些日志记录之外)关闭。无法恢复此严重错误。由于线程对应用程序至关重要,因此它也必须关闭 现在我的问题是:如何监视线程的状态? 你愿意吗 是否轮询IsAlive属性 重新显示捕获的异常并使用AppDomain.CurrentDomain.UnhandledException 执行一个事件,它将发出后台线程结

我有一个对我的应用程序至关重要的工作线程。
它是用
新线程(方法).Start()创建的我不加入它,我只希望它在我的程序运行时运行。
但是,在这个线程上可能捕获到异常;因此,线程将(除了最后的一些日志记录之外)关闭。无法恢复此严重错误。由于线程对应用程序至关重要,因此它也必须关闭

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

你愿意吗

  • 是否轮询
    IsAlive
    属性
  • 重新显示捕获的异常并使用
    AppDomain.CurrentDomain.UnhandledException
  • 执行一个
    事件
    ,它将发出后台线程结束的信号
  • 使用
    BackgroundWorker
    ,它实现
    RunWorkerCompleted
    ?(但是对于长时间运行的线程来说,BackgroundWorker真的是正确的选择吗?)
  • 完全不同的东西
编辑:

现在,我通过调用
Application.Exit()
->尽早并经常崩溃解决了这个问题。这也是一个选项:)

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

 void ThreadStart()
 {
       try 
       {
            ThreadImplementation();           
       }
       catch (Exception e)
       { 
            mainForm.BeginInvoke(OnBackgroundThreadException, e);
       }
 }

这将确保每当应用程序的主线程执行异常关闭时,都会收到一条消息。你不需要投票。当您需要异步地与UI线程对话时,BackgroundWorker通常很有用。(即进度更新)

在线程异常处理程序的末尾,在主线程上调用回调方法并重新启动工作线程:

public delegate void AbnormalExitDelegate(object errorArgs);

class Boss
{
    Worker worker;
    void Start()
    {
        worker = new Worker();
        worker.AbnormalExitCallback = new AbnormalExitDelegate(AbnormalExit);
        Thread workerThread = new Thread(worker.DoWork);
        workerThread.Start();
    }
    public void AbnormalExit(object errorArgs)
    {
        Start();
    }
}
class Worker
{
    public AbnormalExitDelegate AbnormalExitCallback;
    public void DoWork()
    {
        try
        {
           // do work here
        }
        catch (Exception ex)
        {
            // pass stuff back, like the exception
            AbnormalExitCallback(ex);
        }
    }
}

但是我需要一个对控件的引用-仅用于此目的:/a控件是在UI线程上执行代码的方便方式。不一定是唯一的办法。通常你需要在某个时候切换回来,我倾向于尽快。