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

本文关键字:添加 UnhandledException 处理 程序 CurrentDomain AppDomain 类库 我可以 | 更新日期: 2023-09-27 17:58:51

我想订阅AppDomain.CurrentDomain.UnhandledException事件以捕获任何错误,因为我正在尝试一种新的设计模式,我不想在每个事件上都设置try-catch。

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

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

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

不,类库没有主入口点。如果你觉得你需要一个,那么你可以在概念上通过你的公共API表面积虚拟地创建一个。换句话说,限制哪些对象是公共对象,并在这些公共对象中确保在某个时刻进行调用。这可能会达到极端,在做任何事情之前都需要某种工厂调用来设置库。
// 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);

感谢Brian Dishaw

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

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

然而,你的配置必须出现在主应用程序中,所以这可能是不对的。

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

我对犯错很感兴趣。