簡體   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