我一段时间阅读了几篇文章,我认为这些文章描述了一种行为,你可以在.net应用程序(特别是VB.net)中允许异常发生,然后在某种应用程序中处理它级别异常处理程序,而不是在Try / Catch块中。 我的google-fu目前很弱,所以我没有太多运气猜测这个功能是什么,以便找到它的相关信息。
如果这为你们中的任何人敲响了铃声,你能指出我正确的方向是什么功能被调用,以便我可以搜索它吗?
当然,示例代码总是受欢迎的,但这主要是因为我忘记了该功能的名称并且无法搜索它。
答案 0 :(得分:3)
我相信您正在寻找AppDomain.UnhandledException事件。这将允许您处理在您选择的AppDomain中未处理的任何异常。大多数应用程序只有一个AppDomain,因此这段代码应该可以解决问题
AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf MyHandler
然而,实际上尝试在这里处理事件并不是最好的主意。这将触发从代码的任何部分抛出的任何异常。这可能很容易成为一个例外,对您依赖的某些组件来说是致命的,处理它可能会导致更糟糕的错误。
我通常将此事件纯粹用于日志记录和错误报告方案。
答案 1 :(得分:2)
此链接http://msdn.microsoft.com/en-us/library/3a02k5s0(VS.80).aspx将向您展示如何添加处理程序。我同意以这种方式处理异常并不是一个好主意。恕我直言,它是最后的处理程序。
答案 2 :(得分:2)
杰夫阿特伍德写了一篇很棒的CodeProject文章,名为“用户友好异常处理”http://www.codeproject.com/KB/exception/ExceptionHandling.aspx,我认为这篇文章非常有用,可以作为构建自定义最后处理程序的基础。它在VB.Net中,但在评论中有一个C#翻译。
答案 3 :(得分:1)
对于Web应用程序,您可以在Application_Error方法的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
}