如何在它被触发后删除事件处理程序?

时间:2014-01-15 20:50:06

标签: c# event-handling

如何在事件处理程序触发后删除事件处理程序,以便它只能执行一次?

c.Click +=  (o,e)=>{
   Console.WriteLine("Clicked!");
   /*I want to remove this event handler now so that it doesn't fire anymore*/
}

2 个答案:

答案 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;
}