Вопрос: Не работает ProgressBar в многопоточном приложении
Доброй ночи!
Есть код формирования списка файлов на основании полученного массива путей. Для получения дополнительной информации о каждом добавляемом в список файле используется отдельная программа, работа с которой происходит через редирект StdIn, StdOut, StdErr. Все происходит примерно так:
цикл for
взять путь к файлу из массива и дать команду посторонней программе получить информацию об этом файле
Получить эту информацию
вывести всю нужную информацию в новую строку DataGridView
конец цикла for, повторить для следующего файла
Все это прекрасно работало до того как я захотел сделать лучше чем было. Просто как бы файлов много, обработка занимает некоторое время, форма в этот момент виснет, прогресс не видно, прервать выполнение нельзя...
Пихнул это все в BackgroundWorker и начал выполнять оттуда...
Выполняется, но криво!
Таблица заполняется нормально, но прогресс при этом не заполняется (хотя должен!) потом форма перестает отвечать на некоторое время (секунд на 10), потом таки развисает и полоска прогресса заполняется сразу до 100%, причем скролл-бар у датагрида вообще перестает работать (хотя колесиком мышки прокручивает список)...
Код прогресс-бара написан правильно (даже не сомневайтесь!). Проблема скорее лежит в том, что я запускаю посторонний процесс из нового потока и цикл нового потока работает несогласованно со скоростью работы процесса (хотя я сам сейчас не понял что сказал... такого быть не может иначе бы таблица не заполнялась...)...
Добавлено через 2 минуты Мне кажется что Процесс, выполняемый из нового потока , полностью вешает этот поток! Потому BackgroundWorker не репортит прогресс (а потом в конце таки развисает и репортит все сразу)
Но как с этим бороться?
P. S.: Выделил жирным самую светлую мысль... Иначе я хз что тут может быть не так...
Добавлено через 8 часов 34 минуты
Ребят, ну помогите уже кто-нибудь, время идет, а все стало...
У кого какие соображения?
Может код дать? Ну мне кажется каков смысл в этом...
или может у меня сам редирект криво реализован?
Я приеду, скину код... Только помогите.