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

标签 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 库附加到该项目,这不太理想。

非常欢迎任何想法。

最佳答案

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

相关文章:

c# - 如何 - 从进程列表中取消列出我的程序..?

php - 如何使用 PHP 从 MYSQL 表中删除多行

mysql - SQL : Need to return results when the element in a column repeats only two or more years

c# - 如何以编程方式获取字体支持的字符编码?

c# - 使用 LINQ(夹具列表)形成锦标赛表

mysql - 如何在本地服务器上运行原始数据库

c# - 在 DataGridView 中显示列作为密码输入类型

.net - 当包含的控件太大时,如何使滚动条显示在可调整大小的面板中?

c# - 什么时候使用抽象类?

c# - 单词边界的音频挖掘