是否有人编写了.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);
}

其他提示

我使用了与Chris Wenham相同的方法。在负载下,性能会受到影响,因为需要为每个Enqueue / Dequeue分配新的NotifyCollectionChangedEventArgs。

无论如何,在Enqueue中,使用NotifyCollectionChangedAction.Add发送args,添加项目,并将Count-1作为索引。在Dequeue中,使用NotifyCollectionChangedAction.Remove发送args,删除项目,并索引0。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top