我正在使用以下事件来捕获主 UI 线程中未处理的异常。
Application.ThreadException
不幸的是,它不会在单独的线程中捕获那些未处理的错误。我知道
AppDomain.CurrentDomain.UnhandledException
但是,这似乎会在触发时关闭应用程序,而前者不会。
有没有办法在不关闭应用程序的情况下处理单独线程上未处理的异常?
最佳答案
@Ani 已经回答了你的问题。尽管我不同意线程中未处理的异常应该终止应用程序。使用线程通常意味着您拥有某种服务器应用程序。降低它可能会导致很多愤怒的用户。
我写了一篇关于正确异常处理的小文章:https://coderr.io/exception-handling
您应该始终捕获线程的异常。我通常使用以下模式:
void ThreadMethod(object state)
{
try
{
ActualWorkerMethod();
}
catch (Exception err)
{
_logger.Error("Unhandled exception in thread.", err);
}
}
void ActualWorkerMethod()
{
// do something clever
}
通过将逻辑移动到一个单独的方法中并将 try/catch block 保留在线程方法中,找到不能正确处理异常的线程方法要容易得多。
关于c# - 在单独的线程上捕获未处理的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4284986/