0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 19
|
||||||
1 | ||||||
Скачивание файлов по очереди с прогресс баром07.02.2016, 19:10. Показов 3833. Ответов 8
Метки нет (Все метки)
У меня возникла такая задача: есть listView где хранятся имена файлов и ссылки для скачивания. Но суть в другом. Мне надо по очереди их скачать. Причём надо чтобы отображался ход загрузки каждого по отдельности. Мне это представляется так — в цикле foreach по очереди берётся каждый итем и из него достаются имя файла и ссылка. По этой ссылке и имени качается файл в определённое место на диске. И после того как этот файл скачался, цикл продолжается и переходит к следующему итему.
Я пользуюсь webClient с асинхронной загрузкой. И проблема заключается в том, что когда загрузка файла началась, то цикл продолжает идти дальше. А мне бы надо, чтобы цикл ждал до тех пор, пока не произойдёт событие окончания загрузки и лишь тогда продолжил свою работу. Для теста я создал простенькую программку, где всего одно скачивание, но после скачивания должно запуститься сообщение в MessageBox.
P.S. Наличие MessageBox лишь условное, он здесь пока как замена продолжения цикла foreeach. P.P.S. Прошу отнестись с пониманием, так как тема событий и потоков для меня как для новичка пока расплывчата.
0
|
07.02.2016, 19:10 | |
Ответы с готовыми решениями:
8
WebClient скачивание нескольких файлов с общим прогресс баром Скачивание файлов из интернета с прогресс-баром при использовании indy Переименование файлов с прогресс баром Отправка/получение файлов на FTP с прогресс баром |
07.02.2016, 19:33 | 2 |
Вы точно не хотите сделать параллельную загрузку? Пример такого можно подглядеть в браузерах, очень наглядно.
Добавлено через 2 минуты В текущей постановке задачи можно просигналить в autoresetevent, который будет ожидаться перед MessageBox.
1
|
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 19
|
|
07.02.2016, 19:35 [ТС] | 3 |
Дело в том, что это будет программа, которая скачивает сериалы с сайта. Т.е. файлы примерно по 50-60 метров, если в сериале 20 серий, то сразу 20 серий качать будет долго, поэтому желательно, чтобы первые серии скачивались вначале.
Добавлено через 1 минуту
0
|
07.02.2016, 19:41 | 4 |
Логично.
Тогда можно просто утилите wget скормить файл со списком адресов. Подробнее: Объект класса ManualResetEvent, ManualResetEventSlim или AutoResetEvent. У него есть метод ожидания факта установки сигнала. Сигнал установите по факту окончания загрузки файла. Но в таком коде GUI будет подвисать до завершения всего. Лучше передать весь этот список в отдельный поток, где и закачку асинхронно запускать, и ожидать завершения каждого файла (как выше). Асинхронно - чтобы можно было отменить загрузку, если понадобится прервать работу. Почитайте Шилдта, главы 23 и 24: Литература по C# для начинающих и не только
1
|
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 19
|
|
07.02.2016, 19:51 [ТС] | 5 |
Спасибо за помощь. Буду разбираться с AutoResetEvent.
0
|
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 19
|
||||||
07.02.2016, 20:30 [ТС] | 7 | |||||
Добавлено через 9 минут Я вот тут нагуглил. Поможет ли это?
0
|
07.02.2016, 20:34 | 8 |
Не поможет, пока не усвоите всю инфу по порядку из книг. С кашей в голове получится каша в коде.
Надо вот что: Собрать список файлов в массив строк или иных классов; * Передать в функцию загрузки, работающую в потоке; * По очереди * * брать файл из очереди; * * запускать скачку; * * ожидать сигнала; * * по завершению скачки выставлять сигнал; * * закрывать файл; * * брать следующий файл. Причём отображение прогресса из потока скачки в поток GUI надо проводить только подходящими средствами синхронизации. Иначе программу заглючит.
1
|
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 19
|
|
07.02.2016, 20:37 [ТС] | 9 |
Ок, понял
0
|
07.02.2016, 20:37 | |
07.02.2016, 20:37 | |
Помогаю со студенческими работами здесь
9
Скачивание файлов с прогресс барами Вывести скачивание файлов в отдельный поток и отобразить прогресс в ProgressBar'е Проблемы со прогресс баром Ребят подскажите с прогресс баром Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |