附加两个不同的异常处理程序来编程?

时间:2015-09-25 11:48:15

标签: c# mysql winforms exception handlers

在我的应用程序中,我使用的是免费的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库附加到那个不太理想的项目。

非常欢迎任何想法。

1 个答案:

答案 0 :(得分:2)

您可以尝试仅将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。