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