| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB .NET > BackgroundWorker |
| Автор: noob4ever 19.7.2009, 23:19 | ||
вопрос: почему во время запуска фонового процесса форму не могу двигать и кнопки нажимать?? ведь запускается в отдельном процессе, кстати с копированием файла все выходит, а тут нет, форма не реагирует до завершения процесса. я начинаю разбираться и постоянно натыкаюсь на какой нибудь камешек
|
| Автор: diadiavova 20.7.2009, 01:35 | ||
Дело в том, что из метода, который по идее должен вызываться асинхронно ты обращаешься к самому бэкграундвокеру, а он создан в том же потоке, что и форма, а стало быть и операция выполняется в нём же. Чтобы этого избежать надо обратиться к методу Invoke формы, для вызова метода в её потоке
Вот так всё сработает |
| Автор: noob4ever 20.7.2009, 07:44 | ||
| форма тормозит жутко, но управление не пропадает кстате странное дело, время работы : To 100000
|
| Автор: diadiavova 20.7.2009, 11:11 | ||
| Ну так через посредника ведь всё делается, да ещё и в разных потоках, там есть свои сложности. Можно попробовать реализовать по-другому. Не вызывать из другого потока метод ReportProgress, а вместо этого скидывать данные в переменную, а из основного потока считывать их по таймеру. Другой вариант не вызывать метод так часто, а только тогда, когда значение прогресса реально меняется
|
| Автор: noob4ever 20.7.2009, 14:07 | ||||
ясно, разобрался кажется. выходит прогресс из другова потока поэтому если часто отправлять ReportProgress, выходит так долго. для проверки поставил 10 миллионов и за 1 секунду выполнилось если проверять остаток. |
| Автор: diadiavova 20.7.2009, 14:08 |
| Не проверка, просто так ты вызываешь метод в 100 раз реже. На этом и экономишь. |