c# - ObservableCollection<T> 中的 block 重入

标签 c# .net events collections observablecollection

有人可以向我解释一下 BlockReentrancy 的目的是什么吗?方法在ObservableCollection<T>

MSDN显示以下内容作为示例:

//The typical usage is to wrap an OnCollectionChanged call within a using scope, as in the following example:

using (BlockReentrancy())
{
    // OnCollectionChanged call
}

但这似乎并没有为我阐明目的是什么。有人愿意解释一下吗?

最佳答案

ObservableCollection 实现了 INotifyCollectionChanged,因此它有一个 CollectionChanged 事件。如果有此事件的订阅者,他们可以在集合已处于通知过程中时进一步修改集合。由于 CollectionChanged 事件准确跟踪更改的内容,因此此交互可能会变得非常困惑。

因此,作为一种特殊情况,ObservableCollection 允许 CollectionChanged 事件的单个订阅者从其处理程序修改集合。但它不允许修改 CollectionChanged 处理程序的集合,如果有两个或多个订阅者 CollectionChanged 事件。

一对方法 BlockReentrancyCheckReentancy 用于实现此逻辑。 BlockReentrancy 用在 OnCollectionChanged 方法的开头,CheckReentancy 用在所有修改集合的方法中。

关于c# - ObservableCollection<T> 中的 block 重入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6247427/

相关文章:

c# - WinRT C++(Win10)、opencv HSV色彩空间、图像显示、神器

c# - 使用 Cache.Add 时,如果键已经存在或它是否静默失败,是否会抛出异常?

c# - WinForms 应用程序的正确本地化

iphone - 如何以编程方式将 UIView 或 UIImageView 与 "touch up inside"等事件链接?

c# - 设置 myButton.Enabled = true 会触发单选按钮的 CheckedChanged 处理程序

Ruby - 主线程退出时不要终止进程

c# - WPF 控件模板和数据模板

.net - 就像 Entity Framework 中的运算符一样?

c# - 通过Docker在IIS上部署经典ASP应用程序

c# - 使用 NetBios 名称的受信任域的 PrincipalContext.ValidateCredentials 速度慢