Как сделать BlockingCollection наблюдаемой? - PullRequest
2 голосов
/ 19 октября 2010

Я написал класс очереди с хорошим приоритетом,

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 ]

1 голос
/ 19 октября 2010

Связывание с базовой коллекцией (приоритетная очередь), кажется, работает.Тогда я просто вызываю Add и Take для блокирующей коллекции.Наверное, поэтому они решили разделить объекты.

0 голосов
/ 19 октября 2010

BlockingCollection не реализует интерфейс INotifyCollectionChanged, необходимый для привязки данных (AFAIK).Похоже, вам нужно свернуть свою собственную реализацию (либо наследовать от блокировки коллекции, либо инкапсулировать ее), которая реализует указанный интерфейс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...