如何赶在GUI线程的异常?(How do I catch an exception in a GUI

2019-11-04 06:29发布

则抛出异常基于一个图片框的用户控制,使其显示典型误差图像(红色X)。 由于GUI线程捕获并处理异常本身,我不能轻易找出异常发生和调试哪里。

我目前在包装一个try-catch整个OnPaint中的代码,并能够调试代码,但我觉得这是很乏味的,所以我想知道是否有从GUI线程异常闯入调试器的方式。

Answer 1:

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

但是,如果一个调试器附加则覆盖此模式。 这样的异常将永远是未处理的,如果没有活动的catch子句。 因此,调试器将停止,让您诊断问题。 通过编写自己的try / catch,你会阻止这样做。

一定要提防OnPaint()方法可以是特殊的,特别是对图片框。 它有一个try / catch子句,捕捉未处理的异常,并画一个红叉。 这是一个有点不寻常,而且是必要的,因为它支持ImageLocation财产。 它允许它从一个潜在不可靠的网络源显示图像。 在这种情况下,故障拍摄异常的最好方法是使用调试+异常,勾选复选框,抛出该异常。 这迫使调试器总是异常停止,即使它不是未处理。



文章来源: How do I catch an exception in a GUI thread?