在我的应用程序中,我使用的是免费的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库附加到那个不太理想的项目。
非常欢迎任何想法。
答案 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。