MSDNのドキュメントを読むだけで、
UnhandledException イベントが既定のアプリケーション ドメインで処理される場合、スレッドがどのアプリケーション ドメインで開始されたかに関係なく、任意のスレッドで未処理の例外が発生すると、そこで発生します。そのアプリケーション ドメインでイベントが発生します。そのアプリケーション ドメインが既定のアプリケーション ドメインではなく、既定のアプリケーション ドメインにもイベント ハンドラーがある場合、両方のアプリケーション ドメインでイベントが発生します。
たとえば、スレッドがアプリケーション ドメイン "AD1" で開始され、アプリケーション ドメイン "AD2" でメソッドを呼び出し、そこからアプリケーション ドメイン "AD3" でメソッドを呼び出すと、例外がスローされるとします。UnhandledException イベントが発生する可能性がある最初のアプリケーション ドメインは "AD1" です。そのアプリケーション ドメインが既定のアプリケーション ドメインでない場合、イベントは既定のアプリケーション ドメインでも発生する可能性があります。
したがって、解決策は、コンポーネント用に別のドメインを作成し、ドメイン用のイベント ハンドラーを作成することです。
AppDomain domain = AppDomain.CreateDomain("MyDomain");
domain.UnhandledException += MyDomainUnhandledException
static void CurrentDomainUnhandledException(objectsender,UnhandledExceptionEventArgs e)
{
//Exception handling logic for my domain
}
これにより、例外が親アプリケーションに伝播されなくなります。