c# - 在单独的线程上捕获未处理的异常

标签 c# exception-handling

我正在使用以下事件来捕获主 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/

相关文章:

c# - Visual Studio 中具有智能感知的 Simple.Data Micro ORM(动态)

c# - 如何在 Visual Studio 中调试具有类库输出类型的项目?

c# - EF7 RC2 代码首先创建数据库

c# - 使多个控件使用相同的工具提示消息(c# 客户端应用程序)

c++ - "first-chance exception..."消息中的十六进制数字是什么意思?

java - 什么时候在代码中捕获 RuntimeExceptions?

python - 如何找到失败的 python 导入路径?

java - java中未经检查的异常是什么意思

android - Android:崩溃后是否可以继续 “caller” Activity ?

c# - 在 Entity Framework 中订购包含的实体的最佳方式?