2
如何在事件处理程序启动后删除事件处理程序,以便它只能执行一次?如何在事件处理程序被触发后删除它?
c.Click += (o,e)=>{
Console.WriteLine("Clicked!");
/*I want to remove this event handler now so that it doesn't fire anymore*/
}
如何在事件处理程序启动后删除事件处理程序,以便它只能执行一次?如何在事件处理程序被触发后删除它?
c.Click += (o,e)=>{
Console.WriteLine("Clicked!");
/*I want to remove this event handler now so that it doesn't fire anymore*/
}
您需要将事件处理程序存储在一个变量,让你可以参考它以后。因为您想从处理程序中引用处理程序,所以在初始化之前还需要声明它。最后,你不能使用一个未初始化的变量,所以你需要首先将它初始化为null
,尽管这个空值永远不会被读取。
EventHandler handler = null;
handler = (o,e)=>{
Console.WriteLine("Clicked!");
c.Click -= handler;
}
c.Click += handler;
另一种选择是使用命名方法而不是匿名方法。
如果您使用命名方法而不是匿名lambda方法,这将变得更加容易。
c.Click += MyHandler;
void MyHandler(object sender, EventArgs e)
{
Console.WriteLine("Clicked!");
((Button)sender).Click -= MyHandler;
}
请参阅http://stackoverflow.com/questions/1307607/removing-event-handlers。 – OnlyThenDidIReckonMyCurse