2011-11-13 10 views
8

私のアプリケーションはWPFで構築されていますが、私たちが作成したWinFormsコンポーネントがいくつか含まれています。 WinFormsコンポーネントの1つで例外が処理されないと、アプリケーションがクラッシュします。WPFのWinformsコンポーネントから未処理の例外を処理する

WPFイベント用にDispatcherUnhandledExceptionを実装しました。これは、クラッシュを避けるためにエラーを表示し、例外をHandledとマークすることができるため、良いことです。

WPF以外の例外と同様のことを行うことはできますか。私は、ユーザーがアプリケーションを続けるか、かなりのアプリケーションを使用できるようにしていた標準のWinFormsダイアログを期待していましたか?

:WinFormsの例外はDispatcherUnhandledExceptionにキャッチされますが、e.Handledをtrueに設定してもアプリケーションがクラッシュすることはありません。

+1

Windowsフォームフォームの表示/使用方法に関するいくつかのコードを表示できますか? –

+0

'DispatcherUnhandledException'は、UIスレッドで未処理の例外を捕捉する必要があります。あなたのWinFormsコンポーネントは他のスレッドを使用していますか?他のスレッドから間違ってアクセスしていますか? – svick

+0

@DavidePiras WPFマークアップのWindowsFormsHostコントロールでホストされています。例えば。 windowsFormsHost.Child = [WinFormsコントロールのインスタンス] –

答えて

8
+0

いいえ、私はこれらを試していません。見てみましょう。 –

+0

ありがとう! SetUnhandledExceptionModeがトリックをしました。 –

+0

どのように正確にそれらを使用しましたか?私はWPFアプリケーションの起動時にThreadExceptionのハンドラを設定しようとしましたが、SetUnhandledExceptionModeをCatchExceptionに設定しましたが、ハンドラは呼び出されません。 –