如何在事件处理程序触发后删除事件处理程序,以便它只能执行一次?
c.Click += (o,e)=>{
Console.WriteLine("Clicked!");
/*I want to remove this event handler now so that it doesn't fire anymore*/
}
答案 0 :(得分:6)
您需要将事件处理程序存储在变量中,以便稍后可以引用它。因为您想从处理程序中引用处理程序,所以在初始化之前还需要声明它。最后,您不能使用未初始化的变量,因此您需要首先将其初始化为null
,即使永远不会读取该空值。
EventHandler handler = null;
handler = (o,e)=>{
Console.WriteLine("Clicked!");
c.Click -= handler;
}
c.Click += handler;
另一种选择是使用命名方法,而不是匿名方法。
答案 1 :(得分:1)
如果使用命名方法而不是匿名lambda方法,这将变得更容易。
c.Click += MyHandler;
void MyHandler(object sender, EventArgs e)
{
Console.WriteLine("Clicked!");
((Button)sender).Click -= MyHandler;
}