所以我在VB.Net工作,我偶尔会得到一个未处理的异常。我没有得到的是我对所述异常有一个阻止块。
这是我正在谈论的一个样本。
Try
If MyTask3 IsNot Nothing Then
MyTask3.Control(TaskAction.Abort)
MyTask3.Dispose()
End If
Catch ex As DaqException
ErrorMessage = ex.ToString()
MyTask3.Dispose()
Catch ex As AccessViolationException
ErrorMessage = ex.ToString()
MyTask3.Dispose()
Catch ex As ObjectDisposedException
ErrorMessage = ex.ToString()
Catch ex As Exception
ErrorMessage = ex.ToString()
Finally
Task3Aborted = True
End Try
因此,在测试上面的代码片段时,我有时会得到一个AccessViolationException(调试器说的是未处理的,即使它有一个Catch)。我逐步执行代码,执行的catch是ObjectDisposedException。
这是一个案例,我得到两个异常抛出,只有一个处理而另一个未处理?这甚至可能吗?
提前感谢您的帮助。
答案 0 :(得分:4)
从.NET Framework 4开始,如果异常发生在公共语言运行库保留的内存之外,则结构化异常处理程序中的catch语句不会处理公共语言运行库抛出的AccessViolationException异常。若要处理此类AccessViolationException异常,应将HandleProcessCorruptedStateExceptionsAttribute属性应用于引发异常的方法。
我认为这是你的问题。您可以阅读更多here
使用HandleProcessCorruptedStateExceptions
属性标记该函数以处理此异常。您可能需要将legacyCorruptedStateExceptionsPolicy=true
添加到 app.config
如果您想了解最新情况,可以阅读this。