.NET 4.x Как скачивать несколько файлов через WebClient по очереди, через DownloadFileAsync - C#

Узнай цену своей работы

Формулировка задачи:

Доброй ночи. Столкнулся с проблемой по скачиванию нескольких файлов друг за другом. Фулл код как скачиваю:
void DownloadMPQ(Uri u, string s)
        {
            WebClient web = new WebClient();
            web.DownloadProgressChanged += new DownloadProgressChangedEventHandler(Download);
            web.DownloadFileCompleted += new AsyncCompletedEventHandler(DownComp);
            web.DownloadFileAsync(u, s);
        }
        void DownComp(object sender, AsyncCompletedEventArgs e)
        {
            NotificShow(String.Format("'{0}' скачан.", ThisFile));
        }
        void Download(object sender, DownloadProgressChangedEventArgs e)
        {
            long q = e.TotalBytesToReceive / 1024;
            prgDownload.Properties.Maximum = (int)q;
            prgDownload.EditValue = e.BytesReceived / 1024;
        }
И как вызываю (на примере 1 файла)
DownloadMPQ(new Uri("http://localhost/mp.mpq"), "mp.mpq");
В итоге он мне начинает качать все файлы подряд, т.е. в несколько потоков. Вопрос все таки такой: как мне дождаться скачивания 1 файла и начать качать 2й? Новый поток? Пробовал. Не двигается прогресс бар.

Решение задачи: «.NET 4.x Как скачивать несколько файлов через WebClient по очереди, через DownloadFileAsync»

textual
Листинг программы
        public async Task DownloadManyFiles(Dictionary<Uri, string> files)
        {
            WebClient wc = new WebClient();
            wc.DownloadProgressChanged += (s, e) => progressBar1.Value = e.ProgressPercentage;
            foreach (KeyValuePair<Uri, string> pair in files) { await wc.DownloadFileTaskAsync(pair.Key,pair.Value);}
            wc.Dispose();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Dictionary<Uri, string> dict = new Dictionary<Uri, string>();
            dict.Add(new Uri("https://download.microsoft.com/download/4/E/3/4E38FD5A-8859-446F-8C58-9FC70FE82BB1/Express%2032BIT%20WoW64/SQLEXPR32_x86_RUS.exe"), "Firstfile.exe");
            dict.Add(new Uri("https://download.microsoft.com/download/4/E/3/4E38FD5A-8859-446F-8C58-9FC70FE82BB1/Express%2032BIT/SQLEXPR_x86_RUS.exe"), "Secondfile.exe");
            DownloadManyFiles(dict);
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5
Похожие ответы