2010-09-22 123 views
0

基于图片框在用户控件中引发异常,导致它显示典型的错误图像(红色X)。由于GUI线程本身捕获并处理了异常,所以我无法轻松找出发生异常的位置并进行调试。我正在包装整个OnPaint代码在try-catch中,并且能够调试代码,但是我发现它非常乏味,所以我想知道是否有一种方法可以从GUI线程异常入侵调试器。如何在GUI线程中捕获异常?

+0

WinForms或WPF? – Richard 2010-09-22 15:45:07

回答

2

默认情况下,它已经以这种方式工作。 UI线程异常处理方法由Application.SetUnhandledExceptionMode()控制。缺省值是UnhandledExceptionMode.CatchException,以便引发ThreadException事件,并且默认情况下会创建一个ThreadExceptionDialog。

但是,如果连接了调试器,则会覆盖此模式。因此,如果没有活动的catch子句,则总是会处理异常。这样调试器就会停止,让您能够诊断问题。通过编写自己的try/catch,可以防止这种情况发生。

请小心OnPaint()可以是特别的,特别是对于PictureBox。它有一个try/catch子句,捕捉未处理的异常并绘制红色十字。这有点不寻常,但是必须的,因为它支持ImageLocation属性。这可以让它显示来自潜在不可靠网络源的图像。在这种情况下,排除异常的最佳方法是使用Debug + Exceptions,勾选Thrown复选框。这会强制调试器始终停止发生异常,即使它不是未处理的。

+0

我觉得奇怪的是,它没有区分失败的图像加载和OnPaint中抛出的异常。 – mafu 2010-09-22 16:27:18