2009-07-07 36 views
1

可能重複:
How to ensure an event is only subscribed to once如何確保有在C#中只有一個事件處理程序

有時候我要附加一個事件處理程序,但我不知道如果我」我已經做到了這一點。我的解決方法是使用 - =將其刪除,然後使用+ =添加它。有沒有更好的辦法?

編輯:我想確保不會做兩次(或更多)是,如果我這樣做,就會被解僱兩次(或更多)

+7

我的建議:確定。你爲什麼會處於不知道自己程序狀態的情況? – 2009-07-07 02:11:40

回答

1

移除事件的解決方案,然後加入理由它可能會在多線程場景中爆發,在這種情況下,您可以有效地結束添加重複項或排除異常。

您可以在您的活動中實施add and remove,但它有自己的注意事項。

如果你真的只需要一個單獨的類型動作,你可以考慮傳遞一個Action並在需要的時候調用它,這樣可以節省你在事件中遇到的一些困難的邊緣情況。

0

你試試這個:

public event MyClickHandler Click = delegate {}; // add empty delegate! 

更多細節結帳:Hidden Features of C#?

0

所以,我假設你是不是在引發事件的類的控制,你不能檢查它有。如果你需要運行時檢查你是否已經註冊了一個僅在宿側的事件,你可以集中你的註冊方法,檢查你是否已經註冊,像...

private void RegisterForEvent() 
{ 
    lock(_registerLock) 
    { 
    if(!_iveDoneThisAlready) 
    { 
     _iveDoneThisAlready = true; 
     // register for Event here 
    } 
    } 
} 

但是,您的代碼將不得不同意該約定。沒有任何事情可以強制註冊人調用此方法而不是+ =。

相關問題