|
Модераторы: gambit, Kefir, Partizan |
|
Stas123 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 180 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
Есть приложение WPF. В нем с помощью BackgroundWorker происходит работа.
Время от времени, эта работа в потоке BackgroundWorker генерит свои результаты, которые я хочу вывести на экран сразу, а не дожидаясь окончания работы потока. Я пытался вывести их так - добавить в ObservableCollection и вывести через ListView и DisplayMemberBinding. Но оказалось ,что нельзя обновить элементы окна не из потока диспетчера. Поэтому я сделал так.
все это находится в цикле и вызывается несколько раз. Скажите, правильное ли это решение и не нужно ли тут как-то отсоединяться от потока окна диспетчера, с учетом того, что данный код выполняется несколько раз до оконания работы потока BackgroundWorker ? |
|||
|
||||
ДобренькийПапаша |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: 2 Всего: 7 |
Да я, вроде бы, ничего не отсоединял И так должно работать. А вот это по теме: Создание быстро реагирующих многопоточных приложений WPF -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
Brilona |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 54 Регистрация: 8.7.2008 Репутация: 2 Всего: 3 |
Думаю, что промежуточные результаты работы BackgroundWorker'а нужно выводить в обработчике события ProgressChanged, которое возникает при вызове метода ReportProgress. Тут есть пример.
|
|||
|
||||
ДобренькийПапаша |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: 2 Всего: 7 |
Так код, который привёл топикстартер, видимо и находится в ProgressChanged))) -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
Stas123 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 180 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
||||
|
||||
ДобренькийПапаша |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: 2 Всего: 7 |
Было бы логично. -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
-Mikle- |
|
|||
Невидимка Vingrad'а Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
И не придется тогда использовать диспетчер. Событие ProgressChanged возникает в основном потоке. -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
Stas123 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 180 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
-Mikle-, а как мне передать data, который я хочу положить в коллекцию в backgroundWorker_ProgressChanged?
|
|||
|
||||
Brilona |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 54 Регистрация: 8.7.2008 Репутация: 2 Всего: 3 |
Событие ProgressChanged возникает при вызове метода ReportProgress.
|
||||
|
|||||
Stas123 |
|
||||
Бывалый Профиль Группа: Участник Сообщений: 180 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
у меня почему-то не работает.
Даже так.
(_backgroundWorker.WorkerReportsProgress == true Это сообщение отредактировал(а) Stas123 - 15.7.2011, 11:40 |
||||
|
|||||
Brilona |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 54 Регистрация: 8.7.2008 Репутация: 2 Всего: 3 |
Лучше бы написали КАК не работает. В сообщениях выводится не то, что вы ожидали? Возможно вообще какое-то из сообщений не выводится? В определенном месте появляется exception?
P.S. Как мне кажется, сообщение в этой части
не должно отобразиться, потому как действия происходят в другом потоке. |
|||
|
||||
Stas123 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 180 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
Здесь сообщение выводится. Не выводится сообщение , которое должно возникать, когда происходит обработка события ProgressChanged и не происходит ничего из того, что находится в этом методе. |
|||
|
||||
Brilona |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 54 Регистрация: 8.7.2008 Репутация: 2 Всего: 3 |
Такая строка присутствует в коде?
|
|||
|
||||
Stas123 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 180 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
нет.
|
|||
|
||||
Stas123 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 180 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
Brilona, ,Спасибо ,теперь все работает.
|
|||
|
||||
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |