Вопрос

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

Это было полезно?

Решение

Быстрый поиск не дал результатов. Но интерфейс прост, и было бы почти тривиально расширить класс 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);
}

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top