编辑:
致所有回答者和评论者:请专注于提供我要求的解决方案,而不是提供重构它的方法。为简洁起见,下面提供的代码是一个非常精简的示例。我已经在下面说明了这种类型的代码存在于整个应用程序的 20 或 30 个位置,如果存在更简单的解决方案,我将选择不移动/合并/重构任何代码。
原始问题:
首先,简要介绍一下:我们有一个由离岸团队开发的应用程序。此应用程序的目的是对各种数据库表进行夜间维护。它是一个 WinForms 应用程序,但它更像是一个控制台应用程序,因为它所做的只是 1) 在 Form1_Load 中执行单个方法,然后 2) 调用 End 以关闭程序。
问题是错误电子邮件通知不起作用,所以我负责修复它的任务。考虑这段代码:
Try
'This inner Try/Catch is actually code in another method
Try
'Run some code here
Catch ex As Exception
'Errors are logged silently to text file here
End Try
Catch ex As Exception
'Code to email exception details is here
End Try
问题是在内部的 Try/Catch 中抛出并处理了异常。因此,在外部 Try/Catch 中不会处理任何异常,因此没有发送电子邮件通知。
有人可能会说只添加Throw ex
内部 Catch,但请记住,代码中大约有 20 或 30 个地方是这样处理异常的。我正在做的决定是让它现在工作,而不是进行那种开发工作。因此,我寻求一种方法来获取应用程序抛出的最后一个异常。这样,我可以将 finally 块添加到外部 Try/Catch 并执行以下操作:
Finally
If Not Application.GetLastException() is Nothing Then
SendErrorEmail(Application.GetLastException())
End If
End Try