| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > WPF и Silverlight > Вопрос по многопоточности |
| Автор: Stas123 5.7.2011, 10:04 | ||
| Есть приложение WPF. В нем с помощью BackgroundWorker происходит работа. Время от времени, эта работа в потоке BackgroundWorker генерит свои результаты, которые я хочу вывести на экран сразу, а не дожидаясь окончания работы потока. Я пытался вывести их так - добавить в ObservableCollection и вывести через ListView и DisplayMemberBinding. Но оказалось ,что нельзя обновить элементы окна не из потока диспетчера. Поэтому я сделал так.
все это находится в цикле и вызывается несколько раз. Скажите, правильное ли это решение и не нужно ли тут как-то отсоединяться от потока окна диспетчера, с учетом того, что данный код выполняется несколько раз до оконания работы потока BackgroundWorker ? |
| Автор: Brilona 5.7.2011, 10:12 |
| Думаю, что промежуточные результаты работы BackgroundWorker'а нужно выводить в обработчике события ProgressChanged, которое возникает при вызове метода ReportProgress. http://msdn.microsoft.com/ru-ru/library/system.componentmodel.backgroundworker.aspx. |
| Автор: ДобренькийПапаша 5.7.2011, 10:17 | ||
Так код, который привёл топикстартер, видимо и находится в ProgressChanged))) |
| Автор: Stas123 5.7.2011, 10:22 |
| Нет, не находится. Вроде нормально работает. А лучше поместить в ProgressChanged ? |
| Автор: ДобренькийПапаша 5.7.2011, 10:26 | ||
Было бы логично. |
| Автор: -Mikle- 7.7.2011, 08:42 |
И не придется тогда использовать диспетчер. Событие ProgressChanged возникает в основном потоке. |
| Автор: Stas123 14.7.2011, 16:48 |
| -Mikle-, а как мне передать data, который я хочу положить в коллекцию в backgroundWorker_ProgressChanged? |
| Автор: Brilona 15.7.2011, 09:45 | ||||
Событие ProgressChanged возникает при вызове метода http://msdn.microsoft.com/ru-ru/library/a3zbdb1t%28v=VS.95%29.aspx.
|
| Автор: Stas123 15.7.2011, 11:31 | ||||
у меня почему-то не работает.
Даже так.
(_backgroundWorker.WorkerReportsProgress == true |
| Автор: Brilona 15.7.2011, 14:26 | ||
| Лучше бы написали КАК не работает. В сообщениях выводится не то, что вы ожидали? Возможно вообще какое-то из сообщений не выводится? В определенном месте появляется exception? P.S. Как мне кажется, сообщение в этой части
не должно отобразиться, потому как действия происходят в другом потоке. |
| Автор: Stas123 15.7.2011, 15:11 | ||
Здесь сообщение выводится. Не выводится сообщение , которое должно возникать, когда происходит обработка события ProgressChanged и не происходит ничего из того, что находится в этом методе. |
| Автор: Brilona 15.7.2011, 15:37 | ||
Такая строка присутствует в коде?
|
| Автор: Stas123 15.7.2011, 17:26 |
| нет. |
| Автор: Stas123 19.7.2011, 10:19 |
| Brilona, ,Спасибо ,теперь все работает. |