Лучший отвечающий
Работа с потоками в WPF

Вопрос
-
Здравствуйте.
Подскажите как решить следующиую задачу:\
В WPF приложении я использую патеерн MVVM.
В форме есть DataGrid который биндится на коллекцию в ViewModel.
В ViewModel я создаю экземпляр SerialPort и подписываюсь на событие DataReceived. Это событие возникает в другом потоке, отличном от основного потока приложения.
В этом событии мне надо добавить новый элемент в коллекцию к которой прибиндин грид.
Во время добавления происходит ошибка: Данный тип CollectionView не поддерживает изменения в своем SourceCollection из потока, отличного от потока Dispatcher.
В винформ приложении я делал просто из кода формы this.Invoke, но в MVVM нет ссылки на форму.
Как перенаправить вызов в основной поток?
13 июля 2011 г. 13:10
Ответы
-
Может как-то так?
Dispatcher.Invoke(new Action(()=> { //Тут делаем, то что нужно }));
Передавайте ссылку на окно. И вызывайте Dispatcher окна. Хотя возможно есть и другое решение, не видя кода сложно, что-то сказать.
- Помечено в качестве ответа Abolmasov Dmitry 14 июля 2011 г. 5:06
13 июля 2011 г. 15:10 -
Решение оказалось простейшим:
Надо объявить переменную в классе ViewModel типа Dispatcher, и проинициализировать ее в конструкторе _dispatcher = Dispatcher.CurrentDispatcher;
А дальше в обработчике события уже использовать ее как показано выше.
- Помечено в качестве ответа Abolmasov Dmitry 14 июля 2011 г. 7:57
14 июля 2011 г. 5:47
Все ответы
-
Может как-то так?
Dispatcher.Invoke(new Action(()=> { //Тут делаем, то что нужно }));
Передавайте ссылку на окно. И вызывайте Dispatcher окна. Хотя возможно есть и другое решение, не видя кода сложно, что-то сказать.
- Помечено в качестве ответа Abolmasov Dmitry 14 июля 2011 г. 5:06
13 июля 2011 г. 15:10 -
Решение оказалось простейшим:
Надо объявить переменную в классе ViewModel типа Dispatcher, и проинициализировать ее в конструкторе _dispatcher = Dispatcher.CurrentDispatcher;
А дальше в обработчике события уже использовать ее как показано выше.
- Помечено в качестве ответа Abolmasov Dmitry 14 июля 2011 г. 7:57
14 июля 2011 г. 5:47 -
Вызвать инвок так можно. А как внтури инвока обращаться к сущностям потока дистпечера, если нет ссылки на само окно, содержащее эти сущности (а есть только ссылка на его диспетчер)?
13 августа 2011 г. 14:35