.NET中的全局异常处理?

时间:2010-07-09 08:02:54

标签: exception-handling

异常处理的整个概念令我感到头疼。目前,我想要做的是处理我确信我能处理的特定异常。另一方面,如果抛出我不知道如何处理的异常,我想终止应用程序。当我在我的源代码中放置try-catch块时,它看起来很难看,因为其中有很多。是否有一个全局异常处理机制,就像抛出未处理的异常时触发的事件一样?这样我就可以向用户显示错误消息并终止应用程序,而不是在我的源代码中反复重复此过程。

P.S。我希望在这种情况下终止应用程序,因为我担心一旦抛出未处理的异常,程序可能会不正常地运行。

3 个答案:

答案 0 :(得分:3)

在VB.NET中,您需要处理My.Application.UnhandledException事件:

示例(来自MSDN):

Private Sub MyApplication_UnhandledException( _
    ByVal sender As Object, _
    ByVal e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs _
) Handles Me.UnhandledException
    My.Application.Log.WriteException(e.Exception, _
        TraceEventType.Critical, _
        "Unhandled Exception.")
End Sub

答案 1 :(得分:2)

至少在C#中,您可以分配一个全局的“未处理的异常处理程序”。为此,您需要为AppDomain.CurrentDomain.UnhandledException分配一个新的处理程序。

答案 2 :(得分:1)

您正在构建win表单应用程序或Web应用程序吗?我在自定义Health Monitor上写了一个博客条目,您可以在其中向数据库提交例外。然后在Application_Error方法中添加这样的代码。

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)  
    ''# Code that runs when an unhandled error occurs  
    Dim exception As Exception = HttpContext.Current.Server.GetLastError()  
    Dim emailerrors As Boolean = If(LCase(AppSettings.GetAppValue("EmailErrors")) = "yes", True, False)  
    HealthMonitor.Log(exception, emailerrors)  
End Sub 

这将捕获每个未处理的错误(IE:try / catch之外的错误并记录它们。从那里(我重定向)你可以停止你的应用程序,或做你喜欢的任何事情。