2

我有一个在设计时用于配置各种属性的表单。
我尝试了两种方法来执行表单级捕获所有异常:

(1) 我在构造函数中为 Application.ThreadException 添加了一个处理程序。
(2) 我将表单的 Show 方法包装在 Try/Catch 块中

当我通过将属性网格添加到表单并将我的组件设置为 SelectedObject 进行测试时,这两种方法都在运行时工作。

然而,在设计时,表单只是简单地关闭,没有任何消息;我的消息和任何解释存在未处理异常的消息都没有。

有任何想法吗?

ETA:这与设计时的调试无关。这是关于当我的类型编辑器遇到未处理的异常时如何向用户呈现友好的消息。

4

1 回答 1

0

从技术上讲,您在设计时没有Application对象,并且它不会Show()以与您相同的方式调用方法。捕获异常的最佳方法是用 try/catch 将设计者在加载时遇到问题的有问题的方法或属性包围起来并抛出异常。

只是为了测试,继续在表单中添加一个名为 的虚拟属性IamGoingToThrowAnException,并在该属性的 getter 中执行 a throw new System.Exception("Caught me in design mode"),如下所示:

public string IamGoingToThrowAnException 
{
    get
    {
        throw new System.Exception("Caught me in design mode.");
    }
}

同样的事情适用于任何方法,或通过InitializeComponents方法初始化的属性,或表单的构造函数。

于 2011-11-03T15:59:58.923 回答