我有一個靜態類來處理程序像這樣的事件處理程序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