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