c# - 如何取消订阅使用 lambda 表达式的事件?

标签 c# .net c#-3.0 event-handling lambda

我有以下代码让 GUI 响应集合中的更改。

myObservableCollection.CollectionChanged += ((sender, e) => UpdateMyUI());

首先,这是执行此操作的好方法吗?

第二:取消订阅这个事件的代码是什么?它是否相同但带有 -=(然后又是完整的匿名方法)?

最佳答案

首先...是的,这是一个很好的方法,它干净、小巧且易于阅读和理解...当然要注意“除非您以后想退订”。

我相信Jon Skeet在此之前指出 “当涉及到使用匿名方法创建的委托(delegate)的等效性时,规范明确不保证任何一种行为。”

因此,如果您以后需要取消订阅该事件,您最好实际创建一个委托(delegate)实例,以便稍后可以挂起引用。

var myDelegate = delegate(sender, e){UpdateMyUI()};

myObservableCollection.CollectionChanged += myDelegate;

myObservableCollection.CollectionChanged -= myDelegate;

关于c# - 如何取消订阅使用 lambda 表达式的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/805829/

相关文章:

c# - C# 中的委托(delegate)

c# - 将字符串拆分为无分隔符的数组

c# - 如何在 vs2008 中更改 msi 安装程序包的图标并在为 c# 项目创建包后更改用户界面屏幕

c++ - 为 C++ Windows 服务动态创建安装程序

c# - Lambda 函数中的 If 语句?

c# - 如何在 DataTemplate 的 DataType 属性中引用泛型类型?

c# - SQLite-net TableQuery<T>.Select() 性能不佳

c# - OPC UA 用户身份

.net - WPF 将多个控件绑定(bind)到不同的数据上下文

c# - 如何从客户端证书中读取通用名称?