3

我已经连接了这两个,但偶尔我的应用程序仍然崩溃并且只是抛出 Windows“发生异常”对话框。当我单击确定时,该应用程序就退出了。在什么情况下,这两个处理程序(在 WPF 应用程序中)不会捕获异常?

我应该提到我正在做一堆 COM 互操作,所以这总是值得怀疑的 :-)

4

2 回答 2

3

有几个原因可以说明其中任何一个都不会引发未处理的异常。

Dispatcher.UnhandledException仅针对通过 Invoke 或 BeginInvoke 调用(文档)输入方法的调度程序外观中发生的异常引发。所以没有以这种方式调用的其他线程或方法上的异常将错过这个事件处理程序。

.Net 还在 4.0 中对AppDomain.UnhandledException事件中的例外情况进行了更改。访问冲突和堆栈溢出等损坏状态异常不再通过此事件。

我不确定这些中的任何一个是否与您相关。最简单的检查方法是附加一个调试器并查看它产生的输出。

于 2010-08-26T16:11:08.360 回答
3

.NET 中有无法捕获的异常。这些是 CLR 在进入它认为完全不可恢复的状态时直接抛出的异常。一个例子是 StackOverflowException。Microsoft 的理念是,这种状态不是可能的例外情况,它一定是代码中的错误,因此不应处理。在这种情况下,异常将立即传播到应用程序关闭错误消息。

于 2010-08-26T16:12:01.197 回答