[英]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.