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线程上执行代码的方便方式。不一定是唯一的办法。通常你需要在某个时候切换回来,我倾向于尽快。