使用已定义的catch块获取未处理的异常

时间:2014-07-22 15:53:42

标签: vb.net exception unhandled-exception unhandled

所以我在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。

这是一个案例,我得到两个异常抛出,只有一个处理而另一个未处理?这甚至可能吗?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

  

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

我认为这是你的问题。您可以阅读更多here 使用HandleProcessCorruptedStateExceptions属性标记该函数以处理此异常。您可能需要将legacyCorruptedState­­ExceptionsPolicy=true添加到 app.config 如果您想了解最新情况,可以阅读this