6

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

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

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

4

2 回答 2

1

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

于 2011-06-09T14:15:32.643 回答
0
// 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 框架,我认为没有办法做到这一点,还有什么会加载你的类。我能想到的唯一选项都需要对主应用程序进行某种更改。

我有兴趣犯错。

于 2011-06-09T14:11:07.317 回答