![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Jade |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 18.10.2006 Где: Киев Репутация: нет Всего: нет |
Добрый день.
Один из модулей моей программы выполняет такую задачу : пользователь в нем задает папку, а программа обрабатывает в цикле файлы в этой папке. Анализирует эти файлы, и в зависимости от результата удаляет-перемещает в разные папки и т.д. Ну, в общем все тривиально. Все уже написано и работает правильно, кроме одного но: возьмем к примеру ситуацию, когда в папке 100 файлов, программа уже запущена и выполняется. пользователь видит прогресс-бар, отображающий сколько файлов уже выполнено, и результат на лейбле (обработано: 45 из 100). как только эту программу сворачивают либо двигают окно в сторону (за шапку), программа подвисает. обработка файлов продолжается, но отображение на форме останавливается, и прогрессбар.Value остается на месте. появляется курсор-песочные часы. И это продолжается до тех пор, пока все файлы не обработаны. Странно, но зависает в то время и QIP Infium, а остальные приложения работают нормально. Интуитивно догадываюсь что нужно выполнять эту обработку в каком-то отдельном потоке, и присвоить ему приоритет поменьше, и чтобы ресурсов жрал меньше. Если так и нужно, то подскажите пожалуйста как это сделать (пишу на c#, .net 2.0) Если нужно сделать по другому - буду очень благодарен за советы. Спасибо заранее. |
|||
|
||||
Voyager |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 532 Регистрация: 8.2.2005 Репутация: 3 Всего: 18 |
1) Вставить в цикле в нужные места Apllication.DoEvents() (проще)
2) Использовать потоки или BackgroundWorker (посложнее) |
|||
|
||||
Jade |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 18.10.2006 Где: Киев Репутация: нет Всего: нет |
Ура, заработало! Спасибо. Век живи - век учись ![]() Про BackgroundWorker почитаю еще. |
|||
|
||||
Rififi |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: нет Всего: 36 |
DoEvents - это кривизна, используй потоки, как советуют
для потоков потребуется написть обёртку для доступа к контролам
вызывать так:
В случае с BW даже этого не надо... |
||||
|
|||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | .NET для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |