C# 如何在c中清除事件句柄#

C# 如何在c中清除事件句柄#,c#,event-handling,C#,Event Handling,我正在使用名为“client”的全局变量 比如说 client.getPagesCompleted += (s, ee) => { pages = ee.Result; BuildPages(tvPages.Items, 0); wait.Close(); }; client.getPagesAsync(cat.MainCategoryID); 我需要清除getPagesCompleted的处理程序,并设置另一个处理程序如何轻松清除手柄? 我知道client.ge

我正在使用名为“client”的全局变量

比如说

client.getPagesCompleted += (s, ee) =>
{
    pages = ee.Result;
    BuildPages(tvPages.Items, 0);
    wait.Close();
};
client.getPagesAsync(cat.MainCategoryID);
我需要清除
getPagesCompleted
的处理程序,并设置另一个处理程序
如何轻松清除手柄?
我知道
client.getPagesCompleted-=newEventHandler(…)
。但这是非常困难的。我需要简单的方法。
我正在使用
client.getPagesCompleted=null
,但显示了错误
“仅使用+=-+”

将事件对象保存到变量,并使用
-=
取消订阅。

将事件对象保存到变量,并使用
-=
取消订阅。

删除事件处理程序的唯一方法是使用
-=
构造与通过
+=
添加的处理程序相同的处理程序


如果需要添加和删除处理程序,则需要在命名方法中对其进行编码,而不是使用匿名方法/委托。

删除事件处理程序的唯一方法是使用
-=
构造与通过
+=
添加的处理程序相同


如果需要添加和删除处理程序,则需要在命名方法中对其进行编码,而不是使用匿名方法/委托。

您不必将事件处理程序放在单独的方法中;您仍然可以使用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

您不必将事件处理程序放在单独的方法中;您仍然可以使用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