C#中取消訂閱Lambda事件處理程序的方法
在C#中,匿名Lambda表達式提供了一種方便創建事件處理程序的方法。然而,一個常見的問題是:如何移除或取消訂閱這些事件處理程序。
C#規範不能保證兩個代碼相同的Lambda表達式會產生相等的委託。為了確保成功取消訂閱,建議顯式存儲委託實例。
使用命名EventHandler方法
最直接的方法是定義一個方法並將其分配為事件處理程序:
public void ShowWoho(object sender, EventArgs e)
{
MessageBox.Show("Woho");
}
...
button.Click = ShowWoho;
...
button.Click -= ShowWoho;
使用委託存儲變量
要使用Lambda表達式創建一個自移除的事件處理程序,可以使用委託存儲變量:
EventHandler handler = null;
handler = (sender, args) =>
{
button.Click -= handler; // 取消订阅
// 在此处添加仅执行一次的代码
};
button.Click = handler;
使用輔助方法
雖然由於事件表示的限制,輔助方法不能用於封裝事件處理程序,但泛型委託可以提供解決方案:
button.Click = Delegates.AutoUnsubscribe(
(sender, args) =>
{
// 此处添加仅执行一次的代码
},
handler => button.Click -= handler);
通過遵循這些方法,開發人員可以有效地移除Lambda事件處理程序,確保正確的事件管理和對事件訂閱生命週期的控制。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3