我已经联系了这两个,但偶尔我的应用程序仍然崩溃,只是抛出Windows“发生异常”对话框。当我单击“确定”时,应用程序就会退出。在什么情况下,这两个处理程序(在WPF应用程序中)不会遇到异常?
我应该提一下,我正在做一堆COM互操作,所以总是怀疑: - )
答案 0 :(得分:3)
有两个原因可能导致其中任何一个都无法处理未处理的异常。
Dispatcher.UnhandledException
仅针对通过Invoke或BeginInvoke调用(documentation)输入方法的调度程序外观中出现的异常引发。因此,以这种方式未调用的其他线程或方法的异常将错过此事件处理程序。
.Net还在4.0中对AppDomain.UnhandledException
事件中的异常进行了更改。损坏的状态异常(例如访问冲突和堆栈溢出)不再经历此事件。
我不确定这些中的任何一个是否与您相关。最简单的检查方法是连接调试器并查看它产生的输出。
答案 1 :(得分:3)
.NET中存在无法捕获的异常。这些是CLR在进入一个它认为完全不可恢复的状态时直接抛出的异常。一个例子是StackOverflowException。微软的理念是,这种状态不是特殊情况,它必须是代码中的错误,因此不应该被处理。在这种情况下,异常将立即传播到应用程序关闭错误消息。