![]() |
Модераторы: gambit, Partizan |
![]() ![]() ![]() |
|
Gorlum |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 23.9.2004 Репутация: нет Всего: нет |
Идет заливка из экселя в MSSQL, происходит это давольно долго, помогите сделать прогресс бар для этого процесса
|
|||
|
||||
Kurt |
|
|||
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: 2 Всего: 36 |
Не понимаю проблемы.
Если у вас заливка происходит в каком-нибудь цикле - смещайте ProgressBar при каждой итерации. Если же вся заливка происходит одной командой - работайте через потоки. В одном потоке запустите команду на заливку базы, а в другом - смещение ProgressBar'a. -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
|||
|
||||
Gorlum |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 23.9.2004 Репутация: нет Всего: нет |
С прогресс барами не работал воще, поэтому:
Как узнать что нада прогресс бар нада сместить (что для цикла, что для потока, с потоками воще у меня туго), и как его реализовать (всмысле при каждом добавлении процента выполнения обновлять экан чтобы добавить кубик и изменить процент?) |
|||
|
||||
-ser- |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 1.2.2005 Репутация: 4 Всего: 13 |
-------------------- "Тонкая, однако, работа." |
|||
|
||||
Gorlum |
|
||||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 23.9.2004 Репутация: нет Всего: нет |
Ниче не понимаю ![]() я пока понапридумывал такое: определить общее количество строк в экселевском файле цикл залить строчку количество строк закачано % = округлить(100 * количество строк закачано/ общее количество строк) показать прогрес бар но я так подозреваю что есть методы проще и быстрее (бастрее потомушо заливаются несколько миллионов строк) Есть ли в C# стандартные методы для этого процесса, или как выполнить это потоками ![]() ![]() |
||||
|
|||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 1 Всего: 118 |
Вот тебе простенький пример с потоками. Если запустишь - видно что циферки выводятся не по очереди а в перемешку. Т.е. печать происходит как бы одномоментно. Получается параллельная работа. Как раз на этом и можно играть - в одном потоке заполняешь Excel, а в другом показываешь какие-то штучки на прогресс баре.
|
|||
|
||||
Gorlum |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 23.9.2004 Репутация: нет Всего: нет |
Ок, понятно, спасиба, а как при этом узнать процент выполнения задания?
|
|||
|
||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 1 Всего: 118 |
Это одно из самых проблематичных вариантов, если заранее неизвестно количество строк. Но будем считать, что в какой-то мере оценить это количество можно (хотя бы по размеру файла). Пусть даже приблизительно. В таком случае просто заводится переменная, которая глобальна для обоих потоков. Один поток, который читает данные регулярно обновляет эту переменную (пишет туда число, которое в какой-то мере показывает процент считанных данных), а другой - регулярно читает. Можно делать чтение менее нагруженным - например делать задержку в потоке при чтении этой переменной, и не писать постоянно при чтении данных. |
|||
|
||||
Gorlum |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 23.9.2004 Репутация: нет Всего: нет |
Дюже большое спасиба, на плюсик кликнуть не получилося, мало постов
![]() Это сообщение отредактировал(а) Gorlum - 12.5.2005, 20:02 |
|||
|
||||
anonym |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 27.11.2006 Репутация: нет Всего: 3 |
А у меня программа рекурсивно просматривает все файлы в заданном каталоге и выполняет с ними определённые действия. Как в этом случае рассчитать, сколько осталось работы? Есть ли вообще какое-то решение?
|
|||
|
||||
Sanguine |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 28.6.2007 Репутация: нет Всего: нет |
Можно посчитать все файлы, и делать среднюю оценку затрат времени на обработку одного. Или примерно прикинуть время как функцию от размера обрабатываемого файла. Точного решения до сих пор не существует, насколько мне известно.
|
|||
|
||||
anonym |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 27.11.2006 Репутация: нет Всего: 3 |
Хмм... ясно... я в общем-то так и думал... Йэх... Будем считать файлы)
|
|||
|
||||
alhimik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 20.7.2007 Репутация: 1 Всего: 1 |
||||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
alhimik, обычное поле класса, с которым могут работать функции обоих потоков.
-------------------- ![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |