2013-07-02 2 views
2

У меня есть список, который привязан к BlockingCollection в моем ViewModelСоздание BlockingCollection наблюдаемого

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

и имуществе

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

     } 

Что является самым простым способом делает BlockingCollection наблюдаемым, не может показаться, чтобы найти любые хорошие примеры

+1

Может помочь http://stackoverflow.com/questions/3966629/how-to-make-blockingcollection-observable – keyboardP

+0

Спасибо, Не уверен, что обертка наблюдаемого коллекционирования внутри блока-объединения сделает его потокобезопасным, хотя – klashagelqvist

ответ

2

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

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

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

Смежные вопросы