Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Разработка Windows Forms > progress bar |
Автор: Gorlum 11.5.2005, 18:49 |
Идет заливка из экселя в MSSQL, происходит это давольно долго, помогите сделать прогресс бар для этого процесса |
Автор: Kurt 11.5.2005, 23:25 |
Не понимаю проблемы. Если у вас заливка происходит в каком-нибудь цикле - смещайте ProgressBar при каждой итерации. Если же вся заливка происходит одной командой - работайте через потоки. В одном потоке запустите команду на заливку базы, а в другом - смещение ProgressBar'a. |
Автор: Gorlum 12.5.2005, 00:42 |
С прогресс барами не работал воще, поэтому: Как узнать что нада прогресс бар нада сместить (что для цикла, что для потока, с потоками воще у меня туго), и как его реализовать (всмысле при каждом добавлении процента выполнения обновлять экан чтобы добавить кубик и изменить процент?) |
Автор: -ser- 12.5.2005, 07:57 | ||
|
Автор: Gorlum 12.5.2005, 15:15 | ||||
Ниче не понимаю ![]() я пока понапридумывал такое: определить общее количество строк в экселевском файле цикл залить строчку количество строк закачано % = округлить(100 * количество строк закачано/ общее количество строк) показать прогрес бар но я так подозреваю что есть методы проще и быстрее (бастрее потомушо заливаются несколько миллионов строк) Есть ли в C# стандартные методы для этого процесса, или как выполнить это потоками ![]() ![]() |
Автор: AntonSaburov 12.5.2005, 17:13 | ||
Вот тебе простенький пример с потоками. Если запустишь - видно что циферки выводятся не по очереди а в перемешку. Т.е. печать происходит как бы одномоментно. Получается параллельная работа. Как раз на этом и можно играть - в одном потоке заполняешь Excel, а в другом показываешь какие-то штучки на прогресс баре.
|
Автор: Gorlum 12.5.2005, 17:44 |
Ок, понятно, спасиба, а как при этом узнать процент выполнения задания? |
Автор: AntonSaburov 12.5.2005, 18:52 | ||
Это одно из самых проблематичных вариантов, если заранее неизвестно количество строк. Но будем считать, что в какой-то мере оценить это количество можно (хотя бы по размеру файла). Пусть даже приблизительно. В таком случае просто заводится переменная, которая глобальна для обоих потоков. Один поток, который читает данные регулярно обновляет эту переменную (пишет туда число, которое в какой-то мере показывает процент считанных данных), а другой - регулярно читает. Можно делать чтение менее нагруженным - например делать задержку в потоке при чтении этой переменной, и не писать постоянно при чтении данных. |
Автор: Gorlum 12.5.2005, 20:02 |
Дюже большое спасиба, на плюсик кликнуть не получилося, мало постов ![]() |
Автор: anonym 30.6.2007, 19:52 |
А у меня программа рекурсивно просматривает все файлы в заданном каталоге и выполняет с ними определённые действия. Как в этом случае рассчитать, сколько осталось работы? Есть ли вообще какое-то решение? |
Автор: Sanguine 1.7.2007, 10:19 |
Можно посчитать все файлы, и делать среднюю оценку затрат времени на обработку одного. Или примерно прикинуть время как функцию от размера обрабатываемого файла. Точного решения до сих пор не существует, насколько мне известно. |
Автор: anonym 3.7.2007, 15:23 |
Хмм... ясно... я в общем-то так и думал... Йэх... Будем считать файлы) |
Автор: mr.DUDA 23.7.2007, 10:16 |
alhimik, обычное поле класса, с которым могут работать функции обоих потоков. |