通用异常处理程序

BCa*_*rpe 1 vb.net exception

有没有一种简单的方法可以捕获 VB.NET 应用程序中的所有异常?我有兴趣这样做,这样我的用户就不会看到运行时错误,而只是被告知发生了错误并联系技术支持,然后记录相关错误信息,以便我们的支持团队事后可以查看。

小智 5

您可以使用OnUnhandledException应用程序事件来捕获(几乎)所有代码未处理的异常。

\n\n

在“项目属性”窗口(双击解决方案资源管理器上的项目文件或“项目菜单”->“[项目名称] 属性”),“应用程序”页面有一个“查看应用程序事件”按钮,可在项目中创建新文件。

\n\n

应用程序事件按钮

\n\n

在该文件中,有一些在应用程序级别触发的事件;其中之一是UnhandledException. 无论您放在那里,都将被执行,而不是经典的 JIT 对话框。该UnhandledExceptionEventArgs对象具有一个Exception包含未处理异常对象的属性,以及一个ExitApplication决定应用程序是否应退出或继续执行的属性。

\n\n
Namespace My\n\n    \' The following events are available for MyApplication:\n    \' \n    \' Startup: Raised when the application starts, before the startup form is created.\n    \' Shutdown: Raised after all application forms are closed.  This event is not raised if the application terminates abnormally.\n    \' UnhandledException: Raised if the application encounters an unhandled exception.\n    \' StartupNextInstance: Raised when launching a single-instance application and the application is already active. \n    \' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected.\n    Partial Friend Class MyApplication\n        Private Sub MyApplication_UnhandledException(sender As Object, e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException\n            MessageBox.Show(e.Exception.ToString) \'<-- the exception object\n            e.ExitApplication = True \'<-- True if you want the application to close; false to continue - if it can\n        End Sub\n    End Class\n\nEnd Namespace\n
Run Code Online (Sandbox Code Playgroud)\n\n

请注意,即使使用此方法,仍然有一些“\xc3\xbcber-exceptions”无法捕获(例如内存不足),但通过这种方式,您可以记录代码中未正确处理的异常,或者实际发生的情况是一开始没有考虑到的。

\n\n

更多信息请点击此处

\n\n

附带说明:不要过分依赖此事件。这必须是针对极其特殊的情况,因为此处捕获的内容应尽快在相应的类/模块/方法中处理。这是调试和测试用例的有用工具,但此事件处理的异常过多将表明代码中出现问题。

\n