ObservableQueue? - PullRequest
       25

ObservableQueue?

0 голосов
/ 11 ноября 2008

Кто-нибудь написал версию общей очереди .Net, которая реализует INotifyCollectionChanged, или она уже где-то спрятана глубоко в .Net Framework?

Ответы [ 2 ]

1 голос
/ 11 ноября 2008

Быстрый поиск не дал результатов. Но интерфейс прост, и было бы почти тривиально расширить класс Queue и добавить поддержку интерфейса. Просто переопределите все методы следующим образом:

// this isn't the best code ever; refactor as desired
protected void OnCollectionChanged( NotifyCollectionChangedEventArgs ccea){
  var temp = CollectionChanged;
  if(temp != null) temp(this, ccea);  
}

// and later in the class

public override SomeMethodThatAltersTheQueue(object something){
  // record state of collection prior to change
  base.SomeMethodThatAltersTheQueue(something)
  // create NotifyCollectionChangedEventArgs with prior state and new state
  OnCollectionChanged(ccea);
}
0 голосов
/ 18 сентября 2009

Я использовал тот же подход, что и Крис Уэнам. Под нагрузкой снижается производительность, потому что новые NotifyCollectionChangedEventArgs должны быть выделены для каждого Enqueue / Dequeue.

Независимо от этого, в Enqueue отправьте аргументы с NotifyCollectionChangedAction.Add, добавленным элементом и Count-1 в качестве индекса. В очереди отправьте аргументы с помощью NotifyCollectionChangedAction.Remove, элемент будет удален и индекс 0.

...