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