【问题标题】:Handle .net exceptions at application level在应用程序级别处理 .net 异常
【发布时间】:2010-10-17 03:18:35
【问题描述】:

不久前我正在阅读几篇文章,我认为这些文章描述了一种行为,您可以在 .net 应用程序(特别是 VB.net)中允许发生异常,然后在某种应用程序中处理它级异常处理程序,而不是在 Try/Catch 块中。 我的 google-fu 目前很弱,所以我没有太多运气猜测这个功能叫什么来查找有关它的信息。

如果这对你们中的任何人敲响了警钟,您能否指出正确的方向,说明该功能的确切名称,以便我可以搜索它?

当然,我们总是欢迎示例代码,但这主要是因为我忘记了功能的名称而无法搜索它。

【问题讨论】:

    标签: .net vb.net exception


    【解决方案1】:

    我相信您正在寻找 AppDomain.UnhandledException 事件。这将允许您处理您选择的 AppDomain 中未处理的任何异常。大多数应用程序只有一个 AppDomain,所以这段代码应该可以解决问题

    AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf MyHandler
    

    但是,实际上尝试在这里处理事件并不是最好的主意。这将针对从代码的任何部分引发的任何异常触发。这很容易成为一个异常,对您依赖的某些组件是致命的,处理它可能会导致进一步的、更严重的错误。

    我通常将此事件纯粹用于日志记录和错误报告场景。

    【讨论】:

      【解决方案2】:

      对于 Web 应用程序,您可以在 Global.asax.cs 中的 Application_Error 方法中处理它。这是我们的代码:

      protected void Application_Error(object sender, EventArgs e)
          {
              Exception ex = HttpContext.Current.Server.GetLastError();
      
              if (ex is HttpUnhandledException && ex.InnerException != null)
                  ex = ex.InnerException;
      
              SendErrorMail(ex);  //Or log in database or whatever you want to do with it
          }
      

      【讨论】:

        【解决方案3】:

        此链接http://msdn.microsoft.com/en-us/library/3a02k5s0(VS.80).aspx 将向您展示如何添加处理程序。我同意以这种方式处理异常不是一个好主意。恕我直言,它是最后的处理程序。

        【讨论】:

          【解决方案4】:

          Jeff Atwood 写了一篇很棒的 CodeProject 文章,题为“用户友好的异常处理”http://www.codeproject.com/KB/exception/ExceptionHandling.aspx,我发现这篇文章非常有用,可以作为构建最后使用的自定义处理程序的基础。它在 VB.Net 中,但在 cmets 中有 C# 翻译。

          【讨论】:

          • Jeff Atwood 的文章仅适用于 Windows 窗体和控制台应用程序,不适用于 asp.net - 但它仍然是很好的信息,他就何时捕获错误以及何时不捕获错误提供了指导。
          猜你喜欢
          • 2010-09-08
          • 1970-01-01
          • 2019-10-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-01
          相关资源
          最近更新 更多