这是一个非常奇怪的问题。我们有一个带有多个 Catch 块的 Try Catch。第一个 Catch 块没有代码,只是一个注释。
Try
'Some Code
Catch ex As ThreadAbortException
'Do Nothing
Catch ex As Exception
HandleException(ex)
End Try
如果抛出除 ThreadAbortException 之外的异常,则如预期的那样,它会被第二个 Catch 捕获。但是,在 VS2010 中单步执行代码时,ex 对象在这种情况下是 Nothing。到目前为止,我们已经找到了两种方法来“修复”这个问题。
修复 1:重命名第一个异常变量。
Try
'Some Code
Catch tex As ThreadAbortException
'Do Nothing
Catch ex As Exception
HandleException(ex)
End Try
修复 2:将任何代码行添加到第一个 Catch 块。
Try
'Some Code
Catch ex As ThreadAbortException
Dim i As Integer = 1
Catch ex As Exception
HandleException(ex)
End Try
在上述任何情况下,如果运行,HandleException 中的代码似乎仍然可以正常运行。这是 Visual Studio 或调试器中的错误吗?还是我们在这里遗漏了什么,上面的第一段代码无效?
这一切都在 .NET 4.0 中完成。