在单独的线程上捕获未处理的exception

我正在使用以下事件来捕获主UI线程中的未处理exception。

Application.ThreadException 

不幸的是,它没有在单独的线程中捕获那些未处理的错误。 我知道

 AppDomain.CurrentDomain.UnhandledException 

但是,这似乎会在触发时关闭应用程序,而前者则不会。

有没有办法在单独的线程上处理未处理的exception,而不关闭应用程序?

@Ani已经回答了你的问题。 虽然我不同意线程中未处理的exception应该终止应用程序。 使用线程通常意味着您拥有某种服务器应用程序。 把它搞砸可能会导致很多愤怒的用户。

我写了一篇关于正确exception处理的小文章: http : //blog.gauffin.org/2010/11/do-not-catch-that-exception/

你应该总是捕获线程的exception。 我通常使用以下模式:

  void ThreadMethod(object state) { try { ActualWorkerMethod(); } catch (Exception err) { _logger.Error("Unhandled exception in thread.", err); } } void ActualWorkerMethod() { // do something clever } 

通过将逻辑移动到单独的方法并将try / catch块保留在线程方法中,找到不能正确处理exception的线程方法要容易得多。

是的,您必须手动捕获线程上的exception。

但是,这段代码:

 void ThreadMethod(object state) { try { ActualWorkerMethod(); } catch (Exception err) { _logger.Error("Unhandled exception in thread.", err); } } void ActualWorkerMethod() { // do something clever } 

可以使用PostSharp简化为:

 [LogExceptions] void ActualWorkerMethod() { // do something clever }