3

I've hooked both of these, but occasionally my app still crashes and just throws up the Windows "an exception has occurred" dialog. When I click OK, the app just exits. Under what circumstances won't exceptions get caught with these two handlers (in a WPF app)?

I should mention that I'm doing a bunch of COM interop, so that's always suspect :-)

4

2 に答える 2

3

これらのいずれによっても未処理の例外が発生しない理由はいくつかあります。

メソッドが Invoke または BeginInvoke 呼び出しを介して入力されたディスパッチャーのDispatcher.UnhandledException外観で発生する例外に対してのみ発生します (ドキュメント)。したがって、この方法で呼び出されなかった他のスレッドまたはメソッドの例外は、このイベント ハンドラーを見逃すことになります。

.Net は 4.0 で、どの例外がAppDomain.UnhandledExceptionイベントに入るかも変更しました。アクセス違反やスタック オーバーフローなどの破損状態の例外は、このイベントを通過しなくなりました。

これらのいずれかがあなたに関連するかどうかはわかりません。確認する最も簡単な方法は、デバッガーをアタッチして、生成される出力を確認することです。

于 2010-08-26T16:11:08.360 に答える
3

.NET にはキャッチできない例外があります。これらは、CLR が完全に回復不能と見なされる状態になったときに、CLR によって直接スローされる例外です。1 つの例は、StackOverflowException です。Microsoft の哲学では、この状態は考えられる例外的な状況ではなく、コードのバグである必要があり、したがって処理されるべきではないというものです。この場合、例外はすぐにアプリケーションの終了エラー メッセージまで伝播します。

于 2010-08-26T16:12:01.197 に答える