Асинхронная загрузка файлов методом WebClient.DownloadFileAsync - C#

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

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

Вопрос адресуется в первую очередь профессионалам. При разработке приложения возникла необходимость загрузить по списку несколько файлов с https- вебсервера. Сначала для этого использовался синхронный метод загрузки файлов с блокировкой вызывающего потока, и файлы грузятся последовательно один за другим. Загрузка нового файла начинается только после финиша предыдущего. Этот способ не позволяет реализовать визуальный контроль за процессом загрузки, что особенно заметно на файлах большого размера. Асинхронная загрузка дает возможность отслеживать процесс загрузки с помощью прогрессбара или сообщений в панель состояния, но при загрузке одного файла. При загрузке списка из нескольких файлов (в цикле), все файлы загружаются одновременно в нескольких тредах, вместо того, чтобы грузится последовательно. Как реализовать последовательную загрузку файлов с блокировкой создания нового треда следующего файла, пока не завершится загрузка предыдущего. В msdn содержит пример с ошибками http://msdn.microsoft.com/ru-ru/library/ms144197.aspx http://msdn.microsoft.com/ru-ru/libr...completed.aspx Вот более достоверная информация по асинхронному методу. http://www.csharp-examples.net/download-files/ Аналогичный вопрос с примерами решения. До конца не решен. http://www.experts-exchange.com/Prog..._26828518.html
В своей программе вы можете захотеть вести лог событий, скидывая сообщения в richEditBox. Можно использовать такой код:
                richTextBox1.AppendText("Ошибка! Проверьте соединение с Интернет.\r\n");
                int EndTxt=richTextBox1.TextLength;  // можно напрямую, без переменной
                richTextBox1.SelectionStart = EndTxt;
                richTextBox1.SelectionLength = 0;   // установить курсор в конец текста
                richTextBox1.ScrollToCaret();        // прокрутить текст в контроле
Последний пункт обычно добавляется не сразу, после нескольких лет кропотливого изучения. В MSDN нет полной информации.
В своей программе вы можете захотеть вести лог событий, скидывая сообщения в richEditBox. Можно использовать такой код:
                richTextBox1.AppendText("Ошибка! Проверьте соединение с Интернет.\r\n");
                int EndTxt=richTextBox1.TextLength;  // можно напрямую, без переменной
                richTextBox1.SelectionStart = EndTxt;
                richTextBox1.SelectionLength = 0;   // установить курсор в конец текста
                richTextBox1.ScrollToCaret();        // прокрутить текст в контроле
Последний пункт обычно добавляется не сразу, после нескольких лет кропотливого изучения. В MSDN нет полной информации.

Решение задачи: «Асинхронная загрузка файлов методом WebClient.DownloadFileAsync»

textual
Листинг программы
wc.DownloadFileCompleted += AsyncCompletedEventHandler(wc_DownloadFileCompleted);
//...
private void wc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
//загрузка следующего файла
}

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


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

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

12   голосов , оценка 4 из 5