2010-11-24 1 views
3

AppDomain.CurrentDomain.UnhandledException、Application.Current.DispatcherUnhandledException、TaskScheduler.UnobservedTaskExceptionイベントのハンドラの存在にもかかわらず、ときどき終了するアプリがあります。AppDomain.UnhandledExceptionにならずに.NETアプリが終了する

これは、多くのP/Invoke相互運用コードを持つWPFアプリケーションです。 私はすべての "最後のリゾート"イベント(上記を参照)のためのハンドラーで "セーフティネット"を作成しました。しかし、アプリケーションは、標準のWindowsエラーダイアログですべてのハンドラが失われても失敗します。

.netアプリケーションを終了し、AppDomain.CurrentDomain.UnhandledExceptionを回避する原因になる可能性がありますか?

管理されていないスレッドで例外が発生する可能性がありますか?もしそうなら、私はそれで何ができるのですか?

+1

例外が子スレッドで発生した場合、それはバブルアップせず、そのスレッドで処理する必要があります。 –

+0

@Sergey:UnhandledExceptionは – Shrike

答えて

1

CLRは、コード自体がそれを世話しないときに、未処理の例外処理をネイティブのピンコードに魔法のように挿入することはできません。特に、CLRが知らないスレッドのAccessViolationのようなハードウェア例外は、診断なしでアプリケーションを終了させます。そのコードの信頼性と保守性を向上させるには、そのコードの所有者または作成者と協力する必要があります。

+0

を起動する必要がありますが、最初にアプリケーションが終了する場所を検出する必要があります。どのlib /コンポーネントによって終了するのかが検出されます。しかし、それは不可能だ、デフォルトのWindowsのエラーダイアログ:( – Shrike

+0

whithデバッガを使用してください。 –

+0

CLRは魔法のネイティブコードにそのロジックを注入することはできませんが、そのコードは、CLRは、UnhandledExceptionイベントを発生することができない理由をアンロードするには、メインのAppDomainが発生した場合_always_? – Shrike

関連する問題