1

私のアプリケーションは、親 WPF アプリケーションによって動的に読み込まれるアセンブリです。コンポーネントから AppDomain.UnhandledException を処理して、バックグラウンド スレッドからスローされた例外を処理します。

ただし、親アプリケーションも同じイベントに登録しているため、未処理の例外が親アプリケーションにも伝播されているようです。

未処理の例外が親アプリケーションに伝播しないようにする方法はありますか?

親アプリケーション内で実行されている他のコンポーネントに影響を与える可能性があるため、親アプリケーションの動作を変更することはできません。

ありがとう

4

2 に答える 2

0

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
  }

これにより、例外が親アプリケーションに伝播されなくなります。

于 2012-05-12T16:34:21.770 に答える
0

このようにイベントハンドラの明示的な名前を付けます

あなたの名前空間は MyCompany.MyProduct.Service あなたの親の名前空間は MyCompany.MyProduct.Parent です

使用する代わりに

AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException(Myhandler);

以下を使用

AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException(MyCompany.MyProduct.Service.MyHandler);

問題が解決することを願っています。

于 2012-05-12T02:08:55.860 に答える