在我的应用程序中,我使用免费的 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 异常 Hook 到您的事件处理程序。然后创建 2 个您自己的异常事件,其签名与 Appdomain 的签名相同。将 NBug 与您自己的事件 Hook 。在您的事件处理程序中,进行 mysql 清理,然后引发您自己的事件,这些事件应该通知 NBug。不知道这个解决方法是否有效...
我只举例说明一个事件:
创建以下事件:
public event UnhandledExceptionEventHandler OnUnhandledException;
从应用程序域异常(exception)中删除 NBug 分配,仅保留您自己的分配。您可以将 NBug 方法分配给新事件,如下所示:
OnUnhandledException += Nbug.....
就像您将其分配给 Appdomains 事件一样。然后在清理 mysql 的方法中实现:
OnUnhandledException(sender, unhandledExceptionEventArgs);
希望这有帮助。请注意,在调用事件之前,最好先检查事件是否已分配:
if (OnUnhandledException != null)
OnUnhandledException(sender, unhandledExceptionEventArgs);
但在你的情况下,你知道它被分配给 Nbug。
关于c# - 将两个不同的异常处理程序附加到程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32781529/