将两个不同的异常处理程序附加到程序中?

Attaching two different Exception Handlers to program?

在我的应用程序中,我使用了免费的 NBug 崩溃报告库。为了将它集成到您​​的项目中,您需要在 Program.cs:

中添加这两行
AppDomain.CurrentDomain.UnhandledException += NBug.Handler.UnhandledException;
Application.ThreadException += NBug.Handler.ThreadException;

但是,我需要 运行 一段代码以防我的程序崩溃。此代码需要清理 mysql 数据库中的一些条目。我想在 NBug 之后简单地添加额外的事件句柄:

AppDomain.CurrentDomain.UnhandledException += NBug.Handler.UnhandledException;
Application.ThreadException += NBug.Handler.ThreadException;
Application.ThreadException += new ThreadExceptionEventHandler(mysqlcleanup);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(mysqlcleanup1);

然而在这种情况下,程序只执行 mysql 清理事件,而忽略 NBug 事件。甚至可以有多个异常处理程序吗?我考虑过将 NBug 源代码编辑为 运行 mysql 命令,但这意味着将 mysql 库附加到那个不太理想的项目。

非常欢迎任何想法。

您可以尝试仅将 AppDomain 异常挂接到您的事件处理程序。然后创建 2 个您自己的异常事件,与 Appdomain 的签名相同。将 NBug 挂接到您自己的事件。在您的事件处理程序中,进行 mysql 清理,然后引发您自己的事件,这些事件应该通知 NBug。不知道此解决方法是否有效...

我只说明一件事:

创建以下事件:

public event UnhandledExceptionEventHandler OnUnhandledException;

从 Appdomain 异常中删除 NBug 分配,只保留您自己的分配。在那里,您将 NBug 方法分配给您的新事件,如下所示:

OnUnhandledException += Nbug..... 

就像您将其分配给 Appdomains 事件一样。然后在你清理 mysql 的方法中你实现:

OnUnhandledException(sender, unhandledExceptionEventArgs);

希望这对您有所帮助。请注意,最好在调用之前先检查您的事件是否已分配:

if (OnUnhandledException != null)
OnUnhandledException(sender, unhandledExceptionEventArgs);

但在您的情况下,您知道它已分配给 NBug。