我有很多代码是从我正在研究的旧winforms项目中编写的。我最近创建了一种方法来记录在几个try / catch块中发生的错误(到数据库)。有没有一种方法可以在应用程序移动以捕获ex作为异常时将整个应用程序添加到应用程序中,或者如果异常以某种方式未处理,而不是将其添加到我的所有try / catch块中?
我的方法是由数据集设计者创建的,用于在我的数据库中的“错误表”中插入一行,如下所示:
tbladapter.LogError("TRY/CATCH", ex.Message & ";;;; " & ex.InnerException.ToString, My.Application.UserID, Now)
Msgbox("Tell genius he needs to learn how to expect and handle errors!")
答案 0 :(得分:3)
是的,您可以捕获所有异常,即使它们被try / catch块捕获也是如此。您可以通过处理当前FirstChanceException
的{{1}}事件来执行此操作。要做到这一点,当您的应用程序启动时,请调用AppDomain
,如下所示:
AddHandler
这是一个示例处理程序方法:
AddHandler AppDomain.CurrentDomain.FirstChanceException, AddressOf FirstChanceExceptionHandler
另外,我应该提一下,使用Private Sub FirstChanceExceptionHandler(sender As Object, e As System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs)
Console.WriteLine(e.Exception.ToString())
End Sub
通常不赞成回归VB6。 MsgBox
是更好的选择。此外,您可能不知道在大多数异常中简单地调用MessageBox.Show
将显示消息,源,堆栈跟踪以及所有内部异常的消息。调用ToString
比访问所有这些单独的属性更容易。
答案 1 :(得分:0)
在Windows窗体应用程序中,您可以挂钩的ThreadException
上有Application
个事件。只要应用程序中发生异常,此方法就会运行。
在创建表单的类(可能是Program.vb?)中,您可以添加类似
的内容 Application.ThreadException += New ThreadExceptionEventHandler(form1.someHandler)
在您的表单中处理它。
答案 2 :(得分:0)