我写了一个很好的优先级队列类,
class ConcurrentPriorityQueue<T>
: IProducerConsumerCollection<KeyValuePair<int,T>>, INotifyCollectionChanged
where T : INotifyPropertyChanged
我现在要将其包含在BlockingCollection
,
Queue = new ConcurrentPriorityQueue<DownloadItem>(10);
Buffer = new BlockingCollection<KeyValuePair<int, DownloadItem>>(Queue, 1000)
{
new KeyValuePair<int, DownloadItem>(0, new DownloadItem{Url = "stackoverflow.com"})
};
这样它可以添加最大容量,并希望有些线程安全。但是,现在我似乎失去了可观察的功能!
如何将DataGrid挂钩到此集合,以便它仍然收到集合更改的通知?
答案 0 :(得分:1)
绑定到底层集合(优先级队列)似乎有效。然后,我只需在阻止集合上调用Add
和Take
。我想这就是为什么他们决定将这些对象分开。
答案 1 :(得分:0)
BlockingCollection
未实现对数据绑定(AFAIK)至关重要的INotifyCollectionChanged
接口。看起来你必须汇总你自己的实现(继承自阻塞集合或封装它)来实现所述接口。