2010-06-20 80 views
1

我使用一個名爲「客戶」的全局變量如何清除事件處理在C#

例如

client.getPagesCompleted += (s, ee) => 
{ 
    pages = ee.Result; 
    BuildPages(tvPages.Items, 0); 
    wait.Close(); 
}; 
client.getPagesAsync(cat.MainCategoryID); 

我需要清除處理程序getPagesCompleted並設置另一個處理程序。
如何輕鬆清除手柄?
我知道client.getPagesCompleted-=new EventHandler(...)。但這非常困難。我需要簡單的方法。 我正在使用client.getPagesCompleted=null,但顯示錯誤。 "only use +=/-+"

回答

0

將事件對象保存到變量中,並使用-=來取消訂閱。

6

刪除事件處理程序的唯一方法是使用與通過+=添加的相同處理程序的-=構造。

如果您需要添加和刪除處理程序,那麼您需要使用匿名方法/委託在命名方法中對其進行編碼。

2

您不必將事件處理程序放在單獨的方法中;你仍然可以使用你的lambda函數,但你需要將它分配給一個委託變量。例如:

MyEventHandler handler = (s, ee) => 
{ 
    pages = ee.Result; 
    BuildPages(tvPages.Items, 0); 
    wait.Close(); 
}; 

client.getPagesCompleted += handler; // Add event handler 
// ... 
client.getPagesCompleted -= handler; // Remove event handler