所以我在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,调试器也会说未处理)。我逐步执行代码,执行的捕获是ObjectDisposedException。
那么,这是在我抛出两个异常并且仅处理一个异常而另一个未处理的情况下吗?那有可能吗?
在此先感谢您的帮助。
从.NET Framework 4开始,如果异常发生在公共语言运行库保留的内存之外,则结构化异常处理程序中的catch语句不会处理由公共语言运行库引发的AccessViolationException异常。若要处理此类AccessViolationException异常,应将HandleProcessCorruptedStateExceptionsAttribute属性应用于引发异常的方法。
我认为这是您的问题。您可以在这里阅读更多内容。
使用HandleProcessCorruptedStateExceptions
属性标记该函数以处理此异常。您可能需要添加legacyCorruptedStateExceptionsPolicy=true
到您的app.config中。
你可以阅读这个,如果你想了解发生了什么。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句