4

我在一些偶尔会抛出预期异常的代码周围放置了一个 try/catch 块,但不是捕获它并显示消息框,而是停止调试器并提醒我该异常未处理。

如何处理此异常,以便我的代码在异常发生时不会停止?

在此处输入图像描述

Friend myDevInfo As New devInfo

        ''' <summary>
        ''' Closes the device handle obtained with CreateFile and frees resources.
        ''' </summary>
        ''' 
        Friend Sub CloseDeviceHandle()

            Try
                WinUsb_Free(myDevInfo.winUsbHandle)

                If Not (myDevInfo.deviceHandle Is Nothing) Then
                    If Not (myDevInfo.deviceHandle.IsInvalid) Then
                        myDevInfo.deviceHandle.Close()
                    End If
                End If

            Catch ex As System.AccessViolationException
                MsgBox("System.AccessViolationException")
            Catch ex As Exception
                Throw
            End Try

        End Sub
4

3 回答 3

3

try...catch当没有附加调试器时,该块应该按预期工作。
您可以在 Debug -> Exceptions 下定义调试器中断的异常,我相信默认是 break on AccessViolationException

于 2012-04-25T08:55:45.270 回答
1

访问冲突异常属于称为“损坏状态异常”的一类异常。在 .Net 4 中,Microsoft 决定不再使用 try .. catch 块来捕获这些内容。他们的理由是,在不造成更多损害的情况下,从损坏的状态异常中恢复需要理解和小心,并且如果应用程序关闭,用户的数据会更安全。

MSDN 会告诉你如何扭转这个变化

于 2016-04-06T13:47:09.837 回答
1

在您正在使用的函数的顶部使用此属性。

 [HandleProcessCorruptedStateExceptions()]

只有不安全或受保护的内存才会发生此异常。未分配的内存。如果您使用此属性,则 clr 将检测到它,并且 try-catch 块工作正常,存在于:

System.Runtime.ExceptionServices;
于 2020-07-07T01:45:39.267 回答