2012-01-16 8 views
2

プラグインがサポートされているアプリを開発しています。プラグインは第三者によって開発されることがあります。スポーンされたスレッドから例外をキャッチする方法はありますか?

現在、私はサードパーティのコードから自分のアプリを保護しようとするプラグインへの呼び出しの周りにtry/catchハンドラを持っています。キャッチは問題をログに記録しますが、アプリがクラッシュすることはありません。

私の問題は、サードパーティのコードがスレッドを作成して何らかの作業を行うときです。これらは私のハンドラに捕らえられていません。

「この関数によって生成されたもの」から例外をキャッチする方法はありますか?または、グローバルハンドラで捕捉する必要がありますか?

+3

どのような種類のアプリですか? WinForms? ASP.NET?サービス? WPF? –

+0

WPFですが、それは意味がないと思います。プラグインはGUIフレームワークについて何も知らない。 – GazTheDestroyer

+1

未処理の例外をキャッチする方法は異なる場合があります。 –

答えて

3

プラグインが失敗して同じAppDomain内で実行される場合は、アプリケーションが自動的に失敗するようにするのが最善です。したがって、アプリケーションを停止します。プラグインがクラッシュしたときのアプリケーションの状態はわかりません。

別のオプションは、独自の(子)AppDomainでプラグインを実行することです。これにより、アプリケーションドメインをアンロードして、新しく作成したAppDomainでそのプラグインを再起動し、アプリケーションを再起動する必要がありません。

MEF(Managed Extensibility Framework)を参照してください。これは、特にこれらのシナリオ用に設計されています。

2

グローバルハンドラで例外をキャッチしたい場合は、アプリケーションドメイン内のUnhandledExceptionイベントをサブスクライブすることができます。それはあなたのコードで捕らえられなかったすべての例外を捕まえるでしょう。

主に例外の情報を記録するために使用されます。ただし、アプリケーションの終了を保存することはありません。

関連する問題