BackgroundWorker, получить результат выполнения.
От: Аноним  
Дата: 21.08.06 12:50
Оценка:
Хочется в функции WinForms приложения запустить длительную операцию формирования юзерконтрола.
Решил попробывать использовать BackgroundWorker.
Вопрос: как мне не выходя из в этой же функции узнать что контрол сформирован и получить его.
Re: BackgroundWorker, получить результат выполнения.
От: TK Лес кывт.рф
Дата: 21.08.06 13:05
Оценка:
Hello, " Аноним "
> Хочется в функции WinForms приложения запустить длительную операцию
> формирования юзерконтрола.
> Решил попробывать использовать BackgroundWorker.
> Вопрос: как мне не выходя из в этой же функции узнать что контрол
> сформирован и получить его.

Надо переодически вызывать Application.DoEvents тогда, BackgroundWorker
получит возможность уведомить UI поток о завершении операции.

Но, в целом идея несколько странная... Не совсем понятно что значит
формирование юзерконтрола. Сам юзерконтрола должен создаваться за
незначительно время, а BackgroundWorker должен использоваться только для
"закачки" в него данных.
Posted via RSDN NNTP Server 2.0
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: BackgroundWorker, получить результат выполнения.
От: _FRED_ Черногория
Дата: 21.08.06 13:08
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Хочется в функции WinForms приложения запустить длительную операцию формирования юзерконтрола.

А>Решил попробывать использовать BackgroundWorker.
А>Вопрос: как мне не выходя из в этой же функции узнать что контрол сформирован и получить его.

В BackgroundWorker-е не нужно "формировать" — надо только извлекать\высчитывать\подготавливать данные, а вот формировать и вставлять в "юзерконтрол" — уже только в основном потоке в обработчике RunWorkerCompleted.
А вообще, можно после вызова RunWorkerAsync крутиться в цикле, в котором вызывать Thread.Sleep() до тех пор, пока IsBusy не станет ложью…
... << RSDN@Home 1.2.0 alpha rev. 652>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[2]: BackgroundWorker, получить результат выполнения.
От: Subst  
Дата: 21.08.06 13:31
Оценка:
Здравствуйте, _FRED_, Вы писали:

..........

Проблемма в том, что уже есть практически готовое приложение,
что-то вроде плагинного где есть дерево в тегах которого содержатся юзер контролы.
При нажатии узла создается или обновляется данный контрол и добовляется на эту же форму, где и дерево.
При обновлении сонтрола иногда подгружается большой объем данных из базы, иногда долго формируются отчеты, ну и прорисовка с многими условиями в датагридах довольно тормозит. Вот и хочется убрать этот эффект торможения. Из-за того что во втором потоке пытаюсь измиенгять контролы, которые находятся в тегах дерева получаю эксепшн. Может есть какие-то другие предложения?
Спасибо.
Re[3]: BackgroundWorker, получить результат выполнения.
От: Subst  
Дата: 21.08.06 14:02
Оценка:
up
Re[3]: BackgroundWorker, получить результат выполнения.
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 21.08.06 17:11
Оценка:
Здравствуйте, Subst, Вы писали:

S>При нажатии узла создается или обновляется данный контрол и добовляется на эту же форму, где и дерево.


Создавать элементы управления в другом потоке нельзя. Так что если операции по загрузке данных от конструкторомв элемементов управления отделить нельзя, то никак твою задачу решить нельзя.
... << RSDN@Home 1.2.0 alpha rev. 646 on Windows XP 5.1.2600.131072>>
AVK Blog
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.