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