Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在事件处理程序启动后删除它?_C#_Event Handling - Fatal编程技术网

C# 如何在事件处理程序启动后删除它?

C# 如何在事件处理程序启动后删除它?,c#,event-handling,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*/ } 您需要将事件处理程序存储在变量中,以便以后可以引用它。由于要从处理程序中引用处理程序,因此还需要在初始化它之前声明它。最后,不能使用未初始化的变量,因此需要首先

如何在触发事件处理程序后删除事件处理程序,使其只能执行一次

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

您需要将事件处理程序存储在变量中,以便以后可以引用它。由于要从处理程序中引用处理程序,因此还需要在初始化它之前声明它。最后,不能使用未初始化的变量,因此需要首先将其初始化为
null
,即使该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;
}
看见