我有一个静态类来处理程序像这样的事件处理程序MS SQL数据库交互:C#处理多个事件的事件
public static event EventHandler<SQLExceptionEventArgs> SQLExceptionCaught;
然后我有一个函数来处理它:
private static void OnSQLExceptionCaught(SqlException e)
{
if (SQLExceptionCaught != null)
{
SQLExceptionCaught(SQLExceptionCaught.Target, new SQLExceptionEventArgs(e));
}
}
我还有一个从Windows.Forms.Form继承的自定义窗体,它为该事件处理程序添加了一个委托:
DBHandler.SQLExceptionCaught += this.handleSQLException;
(当表格关闭时它被删除)
然后这个委托在每个表格中被重写。
当只有一个窗体打开时,它可以正常工作,但我无法使其适用于多个窗体,因此它只会从实际触发事件的窗体触发委托。
请您指出我的正确方向吗?它甚至有可能吗?
我很乐意考虑任何其他解决方案,只要它保留此功能。
这没有任何意义。除非您使用每个查询/命令传递表单,否则您无法通过单个全局数据库处理程序来完成此操作。实际上,这正是发送'SQLExceptionCaught.Target'的点,而不是实际的*发送者*。如果每个查询/命令都通过发送者(导致查询执行的实际表单),那么您可以将发送者与处理程序中的'this'进行比较,并知道它是否是“您的”异常。但是,你可能宁愿要保留一个单独的DB处理程序实例。 – Luaan