5

サードパーティのWinFormsコントロールがホストされているWindowsFormsHostを備えたWPFアプリがあります。サードパーティのWinFormsコントロールのバグが原因で、が発生することがありNullReferenceExceptionます。

ハンドラーを設定しましたDispatcherUnhandledExceptionが、そこで例外をキャッチして実行を続行することはできません。

ハンドラーでのみAppDomain.CurrentDomain.UnhandledException「キャッチ」できますが、それ以降は多くのことを実行できず、アプリケーションは単に終了します。

それから私はこれをしようとすると述べたstackoverflowの質問 (答えがあります;今それを見つけることができません)を見つけました:

        System.Windows.Forms.Application.ThreadException += (sender, args) => { /* Catch it here */};
        System.Windows.Forms.Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

(インライン)ハンドラーが呼び出されなかったため、これも役に立ちませんでした。

私は間違った方向に進んでいますか?

4

2 に答える 2

3

おそらく、Windowsフォームスレッド(フォームとコントロールが作成されたスレッド)で例外がスローされなかったために、そのハンドラーが呼び出されない理由はわかりませんが、一般的に、、および/のハンドラーを設定し DispatcherUnhandledExceptionますAppDomain.UnhandledException。またはApplication.ThreadException、プロセスの終了を防ぐことはできません。これらはイベントハンドラーであり、例外ハンドラーではありません。これらのイベントハンドラーを設定した場合でも、未処理の例外は未処理の例外です。通常、これらは最終的なログを追加したり、ユーザーに意味のあるメッセージを表示したりするために使用されます。未処理の例外が発生すると、プロセスの終了を防ぐためにできることは何もありません。

于 2012-09-24T10:44:25.457 に答える
0

スローされる例外は、CSE(破損状態の例外)である可能性があります。これらの種類の例外を処理するには、その関数の[HandleProcessCorruptedStateExceptions]属性を使用します。

于 2018-04-02T10:35:41.437 に答える