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

时间:2010-01-18 17:28:35

标签: c# event-handling observablecollection

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

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:-2)

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

在这种情况下,另一种选择是在CollectionChanged上触发计时器,然后在计时器的刻度上处理。这样,如果你多次触发CollectionChanged,计时器就会被启用,你只会得到一个“tick”事件。