Делаем Blockingколлекцию наблюдаемой

У меня есть список, привязанный к коллекции блокировок в моей модели представления.

<ListBox Grid.Row="1" ItemsSource="{Binding PlantControllers}"

и собственность

  public BlockingCollection<PLANTCONTROLLER> PlantControllers
        {
            get { return _plant.PlantControllers; }

        }

Каков самый простой способ сделать блокировку коллекции наблюдаемой, не могу найти хороших примеров


person klashagelqvist    schedule 02.07.2013    source источник
comment
Может помочь stackoverflow.com/questions/3966629/   -  person keyboardP    schedule 02.07.2013
comment
Спасибо, не уверен, как обертывание наблюдаемой коллекции внутри блокирующей коллекции сделает ее потокобезопасной.   -  person klashagelqvist    schedule 02.07.2013


Ответы (1)


Используйте свой BlockingCollection в качестве «точки входа» для данных, поступающих в ваш поток пользовательского интерфейса с использованием шаблона производитель/потребитель.

Все ваши потоки добавляют элементы в BlockingCollection, а в вашем потоке пользовательского интерфейса используется таймер, чтобы время от времени проверять наличие новых элементов. Если есть, возьмите их и добавьте в ObservableCollection.

Другой вариант может заключаться в том, чтобы каждый поток имел ссылку на диспетчер потока пользовательского интерфейса и использовал Dispatcher.BeginInvoke() для постановки в очередь метода, который берет из BlockingCollection и добавляет к ObservableCollection.

person Steve    schedule 02.07.2013