我不太確定如何做到這一點,因爲我從來沒有需要這種模式。我正在尋找正確的模式來創建一個單獨的類中的事件處理程序,它可以在包含該事件的對象執行時自行移除。需要創建一個事件處理程序,可以在事件發生時自行刪除
基本上,我想創建一個EventHandler
發生在WPF Window.Close
事件。而且,在執行處理程序期間,它將從Window.Close
事件中刪除它自己。我希望這足夠具體,繼續下去。
另外,這種模式有沒有特定的名稱?
我不太確定如何做到這一點,因爲我從來沒有需要這種模式。我正在尋找正確的模式來創建一個單獨的類中的事件處理程序,它可以在包含該事件的對象執行時自行移除。需要創建一個事件處理程序,可以在事件發生時自行刪除
基本上,我想創建一個EventHandler
發生在WPF Window.Close
事件。而且,在執行處理程序期間,它將從Window.Close
事件中刪除它自己。我希望這足夠具體,繼續下去。
另外,這種模式有沒有特定的名稱?
嘗試這樣做下一篇:
RoutedEventHandler handlerLoad = null;
handlerLoad = delegate
{
//Do something
Window.Close -= handlerLoad;
};
Window.Close += handlerLoad;
聽起來很合理,但ReSharper抱怨「獲得封閉式封閉」。我猜我可以忽略,因爲我故意這樣做......另外,我想這有助於聲明局部變量爲null,因此它可以在委託內部重用。 – 2012-07-18 11:55:45
我認爲這個解決方案依賴於系統按照他們註冊的順序執行事件處理程序。這是一個實現細節,不是由Microsoft保證的,因此我不會依賴它。 – 2012-07-18 12:10:29
會像下面的工作?
public void EventHandlerSubscription_Invoked(object sender, EventArgs args)
{
_objectContainingEvent.MyEventHandler -= EventHandlerSubscription;
}
對不起,如果這不明智,我打了我的頭頂。
請告訴更多關於「什麼」你的項目:你有什麼打算這樣做。
也許你會感興趣的手動重置事件,除非你重置它們僅觸發一次 : http://msdn.microsoft.com/en-us/library/system.threading.manualresetevent.aspx
爲什麼一定要自己從Window.Close刪除?事件處理程序是注入表單還是本地存在?如果一個本地函數偵聽該事件,那麼當表單實例超出範圍時它會自動解除鎖定。 – 2012-07-18 11:57:53
事件在單獨的類中生成,不在窗口本身內。 – 2012-07-18 12:01:42