2010-07-20 59 views
2

我使用TextChanged事件,我禁用它在這裏我就不需要如下C#禁用事件處理程序問題

object.Event -= new System.EventHandler(myHandler); 
//my code which doesn't need event handler 
object.Event += new System.EventHandler(myHandler); 

我曾經很多次這樣。但我有時需要2禁用代碼:

object.Event -= new System.EventHandler(myHandler); 
object.Event -= new System.EventHandler(myHandler); 
當然

我有2完成了它使代碼

object.Event += new System.EventHandler(myHandler); 
object.Event += new System.EventHandler(myHandler); 

我還不知道爲什麼我需要2次移除事件處理程序,但它的工作大。

但在1例我有問題。

它不能與2個或更多的禁用代碼一起使用。

我的問題是,我怎麼能看這個事件處理程序,如果只需要一個 - =代碼或更多? 或我該如何管理它? 我總是像這樣工作,以確保我總是留下事件處理程序作爲第一次

object.Event -= new System.EventHandler(myHandler); 
//my code which doesn't need event handler 
object.Event += new System.EventHandler(myHandler); 

回答

10

我的建議是停止刪除並重新添加事件處理程序,而是向你的事件處理程序本身添加一個標誌,該標誌禁止你在這些代碼段中需要禁止的任何活動。

您可以有一個單一的布爾標誌,或者使用某種類型的引用計數,這取決於你需要如何應對嵌套。

如果有一些原因,你不能改變現有的事件處理程序,怎麼樣創建一個新的事件處理程序,你重視事件,並呼籲從舊的?

+0

是它比啓用和禁用處理器 – 2010-07-20 09:07:55

+0

我已經做到了更高效,它的偉大工程。非常感謝 – bilal 2010-07-20 10:47:55

+0

非常好!很高興它有幫助。你在這裏是新的 - 不要忘記投票你喜歡的東西或答案你接受 – 2010-07-20 11:35:16

4

您需要刪除的事件處理程序多次,你已經添加了它 - 你將不能夠告訴他們什麼時候,因爲訂閱對你來說是有效的隱藏。

理想的情況下,只要確保你只需要申請多次,它應該是顯而易見的,你需要多少次取消了。通常這會是一次。有點奇怪,你最終有兩個訂閱開始......我懷疑這可能表明你的代碼中存在一個錯誤。

注意,退訂使用未已訂閱的事件處理程序是無操作。

(事件處理程序本身知道它是否真的很「活躍」的威爾的想法是一個好太多,順便說一句。)