C# 我可以向类库中的AppDomain.CurrentDomain.UnhandledException添加处理程序吗

C# 我可以向类库中的AppDomain.CurrentDomain.UnhandledException添加处理程序吗,c#,class-library,unhandled-exception,C#,Class Library,Unhandled Exception,我想订阅AppDomain.CurrentDomain.UnhandledException事件以捕获任何错误,因为我正在尝试一种新的设计模式,在这种模式下,我不想对每个事件都进行尝试捕获 通常在win forms应用程序中有一个主入口点,但这是另一个应用程序调用的类库 在类库中是否有一个主入口点可以连接此事件,或者在类库中是不可能的,除非我确定在调用其他方法之前会先调用一个方法? // Set the unhandled exception mode to force errors to go

我想订阅AppDomain.CurrentDomain.UnhandledException事件以捕获任何错误,因为我正在尝试一种新的设计模式,在这种模式下,我不想对每个事件都进行尝试捕获

通常在win forms应用程序中有一个主入口点,但这是另一个应用程序调用的类库

在类库中是否有一个主入口点可以连接此事件,或者在类库中是不可能的,除非我确定在调用其他方法之前会先调用一个方法?

// Set the unhandled exception mode to force errors to go through our handler. 
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

// Add the event handler for handling thread exceptions to the event.
AppDomain.CurrentDomain.UnhandledException += 
    new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
多亏了

显然,这并没有提供一些非声明性的方法来分配处理程序,比如在app.config中分配跟踪侦听器,但这给了我一个想法

您可以编写自己的配置部分来执行此代码。然后,当配置加载后,您可以分配事件处理程序,我将找到一些关于如何执行此操作的链接

但是,您的配置必须出现在主应用程序中,因此这可能不正确

对不起,如果没有某种IoC框架,我不认为有办法做到这一点,还有什么会加载你的类呢。我能想到的唯一选项都需要对主应用程序进行某种更改


我对错误感兴趣。

不,类库没有主入口点。如果您觉得需要一个,那么您可以通过公共API表面积在概念上虚拟地创建一个。换句话说,限制哪些对象是公共的,并且在这些公共对象中确保在某个点进行调用。在做任何事情之前,可能需要进行某种形式的工厂调用来设置库

@Jodrell-谢谢,但是我可以使用[STAThread]属性在我的程序集中定义一个位置,该位置将自动被调用。这不是可执行文件,调用应用程序可以按任何顺序实例化任何表单。这就是为什么我需要在任何事情发生之前订阅这个活动的原因。比如挂.Net应用程序。你可以做一些类似的事情@Jodrell,有趣的阅读。不过对我所做的有点过分:)无论如何谢谢谢谢汉克斯-我已经知道了未处理的异常事件(它在问题的标题中)。我的问题是,类库中是否有一个入口点,我可以在调用其他任何东西之前将其连接起来。我现在明白了你的意思,并且我添加了一些额外的、更多的内容。我失败了,想不出任何符合概要的内容。@Jodril-没问题,无论如何谢谢你的输入。我不认为这是可能的,我只是想我会问:)谢谢,我就是这么想的。我希望在加载程序集时,会有某种事件我可以参与其中。不幸的是,我无法从呼叫应用程序中获得任何信息。看起来这将不得不等到我的下一个可执行文件