在基于图片框的用户控件中引发异常,导致它显示典型的错误图像(红色 X)。由于 GUI 线程自己捕获并处理了异常,因此我无法轻松找出异常发生的位置并进行调试。
我目前正在将整个 OnPaint 代码包装在 try-catch 中,并且能够调试代码,但我发现它非常乏味,所以我想知道是否有办法从 GUI 线程异常中进入调试器。
在基于图片框的用户控件中引发异常,导致它显示典型的错误图像(红色 X)。由于 GUI 线程自己捕获并处理了异常,因此我无法轻松找出异常发生的位置并进行调试。
我目前正在将整个 OnPaint 代码包装在 try-catch 中,并且能够调试代码,但我发现它非常乏味,所以我想知道是否有办法从 GUI 线程异常中进入调试器。
默认情况下它已经以这种方式工作。UI 线程异常处理方法由 Application.SetUnhandledExceptionMode() 控制。默认值为 UnhandledExceptionMode.CatchException,以便引发 ThreadException 事件,并在默认情况下创建一个 ThreadExceptionDialog。
但是,如果附加了调试器,则它会覆盖此模式。因此,如果没有活动的 catch 子句,将始终未处理异常。这样调试器就会停止,让您诊断问题。通过编写你自己的 try/catch,你可以阻止它工作。
请注意 OnPaint() 可能是特殊的,尤其是对于 PictureBox。它有一个 try/catch 子句,捕获一个未处理的异常并画一个红十字。这有点不寻常但很有必要,因为它支持 ImageLocation 属性。这使它可以显示来自可能不可靠的网络源的图像。在这种情况下解决异常的最佳方法是使用 Debug + Exceptions,勾选 Throw 复选框。这会强制调试器始终在出现异常时停止,即使它没有未处理。