71 / 62 / 33
Регистрация: 03.09.2013
Сообщений: 306
|
||||||
1 | ||||||
BackgroundWorker блокирует главный поток13.03.2014, 17:06. Показов 1848. Ответов 2
Метки нет (Все метки)
Подскажите как поправить. Код копирует файлы отмеченные галочками в ListView, увеличивает значение прогресс бара и добавляет имя в текст бокс. Прогресс бар работает неплохо, текст бокс обновляется но с запозданием, и главная форма "не отвечает" во время копирования.
Не совсем понимаю работу делегатов, буду рад если подскажете.
0
|
13.03.2014, 17:06 | |
Ответы с готовыми решениями:
2
Главный поток и вторичный Не могу остановить поток BackgroundWorker Получение значения из фонового потока и передача его в главный поток Передача функции в главный поток в консольном приложении |
17790 / 12941 / 3381
Регистрация: 17.09.2011
Сообщений: 21,215
|
|
13.03.2014, 18:46 | 2 |
Эта строчка перенаправляет указанный аргументом делегат в родительский поток формы.
Фактически, вся работа выполняется в основном потоке, потому и зависания. Насколько я понял, вы сделали это из-за того, что используете при обработке элементы управления формы и пытаетесь избежать вылета InvalidOperationException при обращении к ним из дочерних потоков. Но если вам нужно делегировать только обращение к контролам, то зачем перенаправлять всю работу в основной поток? Вызывайте Invoke только на тех строчках, в которых происходит обращение к элементам управления. Ну а если уж вы используете BackgroundWorker (судя по сигнатуре метода), то и вообще забудьте про Invoke и используйте метод ReportProgress — он сам отмаршаллит куда надо.
1
|
71 / 62 / 33
Регистрация: 03.09.2013
Сообщений: 306
|
||||||
13.03.2014, 20:12 [ТС] | 3 | |||||
kolorotur,
Спасибо. Насколько я понимаю его можно использовать так
Как нибудь разделить можно? Работать с программой во время выполнения не надо, но по крайней мере надо чтоб её можно было таскать и сворачивать в трей. Может есть смысл перед копированием файлов занести данные из ListView в массивы, и освободить контрол? Думаю инициализация массива пройдёт почти без задержки.
0
|
13.03.2014, 20:12 | |
13.03.2014, 20:12 | |
Помогаю со студенческими работами здесь
3
Как передать данные из дочерного потока в главный поток Определить, что блокирует поток Как реализовать, чтобы главный поток ждал, пока завершат свою роботу другие потоки WebClient.DownloadDataAsync блокирует вызывающий поток Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |