WPF は、予期しない例外を処理するための非常に便利な方法を提供します。Application.DispatcherUnhandledExceptionイベントにハンドラーをアタッチするだけで、未処理の例外はすべて次のようになります。
Application.Current.DispatcherUnhandledException += (sender, e) => {
// Show message, log exception, etc.
};
これは、WPF アプリケーション プロジェクトに最適です。これで、 WPF以外のアプリケーションから呼び出されるWPF windows を含むライブラリができました (これはレガシー VBA アプリであり、WPF ライブラリは COM 相互運用機能を介してアクセスできるようになっています)。
つまり、WPF ウィンドウを作成して開き、表示することはできます (これは正常に動作します)が、インスタンスがありませんApplication
。Application.Current
ですnull
。私は WPF クラスを使用していますが、WPF アプリケーション フレームワークの外でそれらを操作しています。
現在、このソリューションの唯一の欠点は、WPF ウィンドウ イベント ハンドラー コードの例外が黙って飲み込まれることです。
void Button_click(sender as object, e as RoutedEventArgs) {
...
// some exception occurs here, but nobody hears her scream
...
}
私はそれが好きではありません。それらをログに記録してエラーメッセージを表示したいと思います。
私の質問: このシナリオで未処理の例外をグローバルにキャッチする方法はありますか、それとも、記述したすべての WPF ウィンドウ イベント ハンドラー コードに一般的な try-catch-log ブロックを追加する必要がありますか?
私が試したこと: