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

SmR*_*Guy 2 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*/
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*rvy 6

您需要将事件处理程序存储在变量中,以便稍后可以引用它.因为您想从处理程序中引用处理程序,所以在初始化之前还需要声明它.最后,您不能使用未初始化的变量,因此您需要null先将其初始化,即使永远不会读取该空值.

EventHandler handler = null;
handler = (o,e)=>{
   Console.WriteLine("Clicked!");
   c.Click -= handler;
}
c.Click += handler;
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用命名方法,而不是匿名方法.