Хочется в функции WinForms приложения запустить длительную операцию формирования юзерконтрола.
Решил попробывать использовать BackgroundWorker.
Вопрос: как мне не выходя из в этой же функции узнать что контрол сформирован и получить его.
Re: BackgroundWorker, получить результат выполнения.
Hello, " Аноним " > Хочется в функции WinForms приложения запустить длительную операцию > формирования юзерконтрола. > Решил попробывать использовать BackgroundWorker. > Вопрос: как мне не выходя из в этой же функции узнать что контрол > сформирован и получить его.
Надо переодически вызывать Application.DoEvents тогда, BackgroundWorker
получит возможность уведомить UI поток о завершении операции.
Но, в целом идея несколько странная... Не совсем понятно что значит
формирование юзерконтрола. Сам юзерконтрола должен создаваться за
незначительно время, а BackgroundWorker должен использоваться только для
"закачки" в него данных.
Posted via RSDN NNTP Server 2.0
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: BackgroundWorker, получить результат выполнения.
Здравствуйте, <Аноним>, Вы писали:
А>Хочется в функции 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, получить результат выполнения.
Проблемма в том, что уже есть практически готовое приложение,
что-то вроде плагинного где есть дерево в тегах которого содержатся юзер контролы.
При нажатии узла создается или обновляется данный контрол и добовляется на эту же форму, где и дерево.
При обновлении сонтрола иногда подгружается большой объем данных из базы, иногда долго формируются отчеты, ну и прорисовка с многими условиями в датагридах довольно тормозит. Вот и хочется убрать этот эффект торможения. Из-за того что во втором потоке пытаюсь измиенгять контролы, которые находятся в тегах дерева получаю эксепшн. Может есть какие-то другие предложения?
Спасибо.
Re[3]: BackgroundWorker, получить результат выполнения.
Здравствуйте, Subst, Вы писали:
S>При нажатии узла создается или обновляется данный контрол и добовляется на эту же форму, где и дерево.
Создавать элементы управления в другом потоке нельзя. Так что если операции по загрузке данных от конструкторомв элемементов управления отделить нельзя, то никак твою задачу решить нельзя.
... << RSDN@Home 1.2.0 alpha rev. 646 on Windows XP 5.1.2600.131072>>