我在一些代码中放置了一个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
答案 0 :(得分:3)
当没有连接调试器时,try...catch
块应该按预期工作
您可以在Debug - &gt;下定义调试器中断的异常。例外情况,我认为默认是在AccessViolationException
打破。
答案 1 :(得分:1)
访问冲突异常属于一类称为“损坏的状态异常”的异常。使用.Net 4,微软决定不再通过try .. catch块捕获这些内容。他们的理由是,如果应用程序关闭,它需要理解并注意从损坏的状态异常中恢复而不会造成更多损害,并且对于用户数据更安全。
MSDN会告诉您how to reverse this change
答案 2 :(得分:1)
在正在使用的函数顶部使用此属性。
[HandleProcessCorruptedStateExceptions()]
只有不安全或受保护的内存才会发生此异常。未分配的内存。如果使用此属性,则clr将检测到该属性,并且try-catch块在以下位置正常运行:
System.Runtime.ExceptionServices;