Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在应用程序级别处理.net异常_.net_Vb.net_Exception - Fatal编程技术网

在应用程序级别处理.net异常

在应用程序级别处理.net异常,.net,vb.net,exception,.net,Vb.net,Exception,不久前我读了几篇文章,我认为这篇文章描述了一种行为,在.net应用程序(特别是VB.net)中,您可以允许异常发生,然后在某种应用程序级异常处理程序中处理它,而不是在Try/Catch块中。 我的GoogleFu目前很弱,所以我不太可能猜出这个功能的名称来查找有关它的信息 如果这对你们中的任何人来说都是个好消息,你能告诉我这个功能的确切名称,以便我可以搜索它吗 当然,示例代码总是受欢迎的,但这主要是因为我忘记了功能的名称,无法搜索它。我相信您正在查找AppDomain.UnhandledExce

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

如果这对你们中的任何人来说都是个好消息,你能告诉我这个功能的确切名称,以便我可以搜索它吗


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

我相信您正在查找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-但它仍然是很好的信息,他给出了何时捕捉错误以及何时不捕捉错误的指导。