在应用程序级别处理.net异常
不久前我读了几篇文章,我认为这篇文章描述了一种行为,在.net应用程序(特别是VB.net)中,您可以允许异常发生,然后在某种应用程序级异常处理程序中处理它,而不是在Try/Catch块中。 我的GoogleFu目前很弱,所以我不太可能猜出这个功能的名称来查找有关它的信息 如果这对你们中的任何人来说都是个好消息,你能告诉我这个功能的确切名称,以便我可以搜索它吗在应用程序级别处理.net异常,.net,vb.net,exception,.net,Vb.net,Exception,不久前我读了几篇文章,我认为这篇文章描述了一种行为,在.net应用程序(特别是VB.net)中,您可以允许异常发生,然后在某种应用程序级异常处理程序中处理它,而不是在Try/Catch块中。 我的GoogleFu目前很弱,所以我不太可能猜出这个功能的名称来查找有关它的信息 如果这对你们中的任何人来说都是个好消息,你能告诉我这个功能的确切名称,以便我可以搜索它吗 当然,示例代码总是受欢迎的,但这主要是因为我忘记了功能的名称,无法搜索它。我相信您正在查找AppDomain.UnhandledExce
当然,示例代码总是受欢迎的,但这主要是因为我忘记了功能的名称,无法搜索它。我相信您正在查找AppDomain.UnhandledException事件。这将允许您处理您选择的AppDomain中未处理的任何异常。大多数应用程序只有一个AppDomain,所以这段代码应该可以做到这一点
AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf MyHandler
然而,实际上尝试处理这里的事件并不是最好的主意。这将触发代码任何部分引发的任何异常。这很容易成为一个异常,对您所依赖的某些组件来说是致命的,处理它可能会导致进一步的、更严重的错误
我通常仅使用此事件记录和错误报告场景。对于web应用程序,您可以在Global.asax.cs中的应用程序错误方法中处理它。这是我们的代码:
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
}
此链接将向您展示如何添加处理程序。我同意以这种方式处理异常不是一个好主意。我认为它是最后的处理程序。Jeff Atwood写了一篇很棒的CodeProject文章,题为“用户友好的异常处理”,我发现这篇文章非常有用,可以作为构建自定义最后处理程序的基础。它在VB.Net中,但在评论中有C#翻译。Jeff Atwood的文章仅适用于Windows窗体和控制台应用程序,而不适用于asp.Net-但它仍然是很好的信息,他给出了何时捕捉错误以及何时不捕捉错误的指导。