Vb.net 记录.NET中发生的所有异常

Vb.net 记录.NET中发生的所有异常,vb.net,Vb.net,我有很多代码都是从一个旧的winforms项目中编写的。我最近创建了一个方法来记录在几个try/catch块中发生的错误(到数据库)。有没有一种方法可以让我在应用程序作为异常转移到catch ex时,或者如果异常以某种方式未处理,而不是将其添加到我的所有try/catch块中时,将此功能添加到整个应用程序中 “我的方法”由数据集设计器创建,用于在我的数据库中的“错误表”中插入一行,如下所示: tbladapter.LogError("TRY/CATCH", ex.Message & ";

我有很多代码都是从一个旧的winforms项目中编写的。我最近创建了一个方法来记录在几个try/catch块中发生的错误(到数据库)。有没有一种方法可以让我在应用程序作为异常转移到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!")

在windows窗体应用程序中,
应用程序
上有
ThreadException
事件,可以挂接到该事件中。只要应用程序中发生异常,就会运行此方法

在创建表单的类(可能是Program.vb?)中,可以添加如下内容

Application.ThreadException+=新的ThreadExceptionEventHandler(form1.someHandler)


是的,您可以捕获所有异常,即使它们被try/catch块捕获。您可以通过处理当前
AppDomain
FirstChanceException
事件来执行此操作。为此,当应用程序启动时,调用
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

此外,我还应该提到,使用
MsgBox
通常被认为是对VB6的一种回馈<代码>消息框。显示是一个更好的选择。此外,您可能不知道,对大多数异常简单地调用
ToString
,将显示消息、源、堆栈跟踪以及所有内部异常的消息、源、堆栈跟踪。调用
ToString
也比访问所有这些单独的属性容易。

我不久前在一个web项目中实现了类似的功能,并使用了企业库中的异常处理块功能

这是一个很好的起点,我相信你可以找到其他的起点


从内存来看,我认为这相当容易实现,因为我是从输出自动创建支持票证的。

这是什么类型的项目?申请表格?Web应用程序?@SLC这是一个winforms应用程序。您描述问题的方式听起来有点像是一个类似的用例,但这并不一定意味着这是一个很好的技术解决方案。我对产品了解不够,无法对其进行认可、推荐或解释。
应用程序.ThreadException
仅针对未跟踪的异常引发。@SLC您指的是此事件吗?“此事件允许您的Windows窗体应用程序处理Windows窗体线程中发生的未经处理的异常。”这不会捕获在“我的尝试/捕获”中处理的任何异常。是否正确?您可以捕获异常并重新抛出,只需放入
throw在您的catch块中。这就是我在记录异常时所做的。