繁体   English   中英

在ObservableCollection.CollectionChanged上运行昂贵的操作

[英]Running expensive operations on ObservableCollection.CollectionChanged

在我的模型中,我需要知道特定集合何时被更改,因此我订阅了ObservableCollection的CollectionChanged事件。 除了操作资源相当昂贵之外,这种方法工作得很好。

所以当客户端代码执行时:

foreach(Item i in longList)
{
    model.ObservableCollection.Add(i);
}

当所有重要的是添加最终项目之后的结果时,我正在为每次迭代运行昂贵的操作。

有没有办法取消当前正在运行的事件处理程序,如果在第一个仍在执行时引发另一个CollectionChanged事件 - 然后继续处理最近的事件?

ObservableCollection不是密封类。 派生自己的并添加BeginUpdate和EndUpdate()方法以及IsUpdating属性。

不是直接的。 您正在运行的进程将同步运行 - 因此在您当前进程完成之前不会发生下一个事件。

在这种情况下的一种替代方法是在CollectionChanged上触发计时器,然后在计时器的刻度上处理。 这样,如果多次触发CollectionChanged,则计时器已经启用,并且您只会获得一个“tick”事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM