Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从WPF应用程序动态加载的组件的后台线程处理异常_C#_Wpf_Multithreading_Exception Handling_Unhandled Exception - Fatal编程技术网

C# 从WPF应用程序动态加载的组件的后台线程处理异常

C# 从WPF应用程序动态加载的组件的后台线程处理异常,c#,wpf,multithreading,exception-handling,unhandled-exception,C#,Wpf,Multithreading,Exception Handling,Unhandled Exception,我的应用程序是由父WPF应用程序动态加载的程序集。我处理组件中的AppDomain.UnhandledException,以处理从任何后台线程引发的异常 但是,由于父应用程序也已为同一事件注册,因此未处理的异常也会传播到父应用程序 是否有任何方法可以防止未处理的异常不传播到我的父应用程序 我将无法更改父应用程序的行为,因为这可能会影响父应用程序内运行的其他组件 谢谢请给出事件处理程序的明确名称,如下所示 您的命名空间是MyCompany.MyProduct.Service 您的父级名称空间是My

我的应用程序是由父WPF应用程序动态加载的程序集。我处理组件中的AppDomain.UnhandledException,以处理从任何后台线程引发的异常

但是,由于父应用程序也已为同一事件注册,因此未处理的异常也会传播到父应用程序

是否有任何方法可以防止未处理的异常不传播到我的父应用程序

我将无法更改父应用程序的行为,因为这可能会影响父应用程序内运行的其他组件


谢谢

请给出事件处理程序的明确名称,如下所示

您的命名空间是MyCompany.MyProduct.Service 您的父级名称空间是MyCompany.MyProduct.parent

而不是使用

AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException(Myhandler);
使用下列内容

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

我希望问题能得到解决。

只要阅读MSDN的文档

如果未处理的异常事件是在默认应用程序域中处理的,则无论线程在哪个应用程序域中启动,对于任何线程中的任何未处理的异常,都会在该域中引发该事件。如果线程在具有未处理异常事件处理程序的应用程序域中启动,则会在该应用程序域中引发该事件。如果该应用程序域不是默认应用程序域,并且默认应用程序域中还有一个事件处理程序,则会在两个应用程序域中引发该事件

例如,假设一个线程在应用程序域AD1中启动,在应用程序域AD2中调用一个方法,然后从那里调用应用程序域AD3中的一个方法,在那里它抛出一个异常。可以引发未处理异常事件的第一个应用程序域是AD1。如果该应用程序域不是默认应用程序域,则也可以在默认应用程序域中引发事件

因此,解决方案是为我的组件创建一个单独的域,并为我的域创建事件处理程序

  AppDomain domain = AppDomain.CreateDomain("MyDomain");

  domain.UnhandledException += MyDomainUnhandledException
  static void CurrentDomainUnhandledException(objectsender,UnhandledExceptionEventArgs e) 
  {
   //Exception handling logic for my domain
  }

这将确保异常不会传播到您使用System.Exception捕获的父应用程序中。异常?Linquacious,AppDomain.CurrentDomain.UnhandledException+=CurrentDomainUnhandledException;静态无效CurrentDomainUnhandledExceptionobject发送方,UnhandledExceptionEventTargets e{如果e.Registering{ExceptionProcessor.HandleError.ExceptionObject作为异常,则发生未知错误。组件将关闭,true,true;}else{ExceptionProcessor.HandleError.ExceptionObject作为异常,发生未知错误,为true;}为什么不在代码中创建不同的处理程序,以便永远不会调用父应用程序的处理程序!Linquacious,我在上一条注释中发布的代码位于我的组件中。父应用程序也有一个类似的事件处理程序。当发生异常时,两个处理程序都将被取消。