1

所以我在 VB.Net 中工作,偶尔会遇到未处理的异常。我没有得到的是我有一个针对所述异常的 catch 块。

这是我正在谈论的示例。

        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。

那么这是我抛出两个异常并且只处理一个而另一个未处理的情况吗?这甚至可能吗?

提前感谢您的帮助。

4

1 回答 1

4

从 .NET Framework 4 开始,如果异常发生在公共语言运行时保留的内存之外,则公共语言运行时引发的 AccessViolationException 异常不会由结构化异常处理程序中的 catch 语句处理。要处理此类 AccessViolationException 异常,您应该将 HandleProcessCorruptedStateExceptionsAttribute 属性应用于引发异常的方法。

我认为这是你的问题。你可以在这里阅读更多。
使用属性标记函数HandleProcessCorruptedStateExceptions以处理此异常。您可能需要添加legacyCorruptedState­­ExceptionsPolicy=true到您的app.config中。如果您想了解正在发生的事情,
可以阅读此内容。

于 2014-07-22T15:59:52.457 回答