如何使BlockingCollection可观察?

时间:2010-10-19 08:46:18

标签: c# wpf

我写了一个很好的优先级队列类,

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挂钩到此集合,以便它仍然收到集合更改的通知?

2 个答案:

答案 0 :(得分:1)

绑定到底层集合(优先级队列)似乎有效。然后,我只需在阻止集合上调用AddTake。我想这就是为什么他们决定将这些对象分开。

答案 1 :(得分:0)

BlockingCollection未实现对数据绑定(AFAIK)至关重要的INotifyCollectionChanged接口。看起来你必须汇总你自己的实现(继承自阻塞集合或封装它)来实现所述接口。