-
07-07-2019 - |
题
是否有人编写了.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。
不隶属于 StackOverflow