我想订阅 AppDomain.CurrentDomain.UnhandledException 事件以捕获任何错误,因为我正在尝试一种新的设计模式,我不想在每个事件上都尝试捕获。
通常在 win forms 应用程序中有一个主入口点,但这是一个由另一个应用程序调用的类库。
类库中是否有一个主要的入口点,我可以在其中连接这个事件,或者除非我确定一个方法会在其他任何事情之前被调用,否则在类库中是不可能的?
我想订阅 AppDomain.CurrentDomain.UnhandledException 事件以捕获任何错误,因为我正在尝试一种新的设计模式,我不想在每个事件上都尝试捕获。
通常在 win forms 应用程序中有一个主入口点,但这是一个由另一个应用程序调用的类库。
类库中是否有一个主要的入口点,我可以在其中连接这个事件,或者除非我确定一个方法会在其他任何事情之前被调用,否则在类库中是不可能的?
不,类库没有主入口点。如果您觉得自己需要一个,那么您可以在概念上通过您的公共 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);
感谢布赖恩·迪肖
显然,这并没有为您提供一些分配处理程序的非声明性方式,例如在 app.config 中分配跟踪侦听器,但是,这给了我一个想法。
您可以编写自己的配置部分来执行此代码。然后,当加载配置时,您可以分配事件处理程序,我会找到一些有关如何执行此操作的链接...
但是,您的配置必须存在于主应用程序中,所以这可能是不正确的。
编辑对不起,如果没有某种 IoC 框架,我认为没有办法做到这一点,还有什么会加载你的类。我能想到的唯一选项都需要对主应用程序进行某种更改。
我有兴趣犯错。