2011-01-28 16 views
2

私はリフレクションを使用して他のアセンブリからオブジェクトをインスタンス化しています。これらのアセンブリ内のオブジェクトは、処理の過程で他のスレッドを開始することがあります。このアセンブリの作成者は、これらのワーカースレッドの例外を正しく処理できない可能性があります。 問題は、処理されずに返されると、アプリケーション全体が終了し、AppDomain.CurrentDomain.UnhandledExceptionがトリガーされることです。ワーカースレッドが処理しなかった場合、メインスレッドを続行します

処理する方法はあり

私はtry...catchに私のメソッド呼び出しをラップするだけで試してみたが、それは例外をキャッチしていないようですが(次のワーカースレッドは、実際の障害のあるスレッドで生成されたとして理にかなっています)開発者がすべての例外を正しく処理することを強制することなく、このような状況になっていますか?

このアイデアは、Windowsサービスの仕組みと似ています。ただ1つのアプリケーションが失敗したからといって、Windowsサービスホストもクラッシュするというわけではありません。

ここには何が欠けていますか?

答えて

1

スレッド内で例外が正しく処理されるようにする必要があります。そうでない場合は、アプリケーションを完全にシャットダウンしてください。

AppDomainがシャットダウンしないようにするには、これらの「コンポーネント」を専用のAppDomain内に読み込む必要があります。これにより、アプリケーション全体ではなくAppDomainが破損する可能性があります。

これは他の結果をもたらします(特にオブジェクトにデータを出し入れする)場合、アプリケーションのデザインが劇的に複雑になる可能性があるため、軽く行うことではありません。

関連する問題