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