异常处理的整个概念令我感到头疼。目前,我想要做的是处理我确信我能处理的特定异常。另一方面,如果抛出我不知道如何处理的异常,我想终止应用程序。当我在我的源代码中放置try-catch块时,它看起来很难看,因为其中有很多。是否有一个全局异常处理机制,就像抛出未处理的异常时触发的事件一样?这样我就可以向用户显示错误消息并终止应用程序,而不是在我的源代码中反复重复此过程。
P.S。我希望在这种情况下终止应用程序,因为我担心一旦抛出未处理的异常,程序可能会不正常地运行。
答案 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之外的错误并记录它们。从那里(我重定向)你可以停止你的应用程序,或做你喜欢的任何事情。