Я использую код ниже для загрузки нескольких вложений с сервера TFS:
foreach (Attachment a in wi.Attachments)
{
WebClient wc = new WebClient();
wc.Credentials = (ICredentials)netCred;
wc.DownloadFileCompleted += new AsyncCompletedEventHandler(wc_DownloadFileCompleted);
wc.DownloadFileAsync(a.Uri, "C:\\" + a.Name);
}
Я хотел бы загрузить несколько использований файлов DownloadFileAsync, но я хочу, чтобы они были загружены один за другим.
Можно спросить, "Почему Вы только не используете синхронный метод DownloadFile?" Потому что:
Это - решение, о котором я думал:
foreach (Attachment a in wi.Attachments)
{
WebClient wc = new WebClient();
wc.Credentials = (ICredentials)netCred;
wc.DownloadFileCompleted += new AsyncCompletedEventHandler(wc_DownloadFileCompleted);
wc.DownloadFileAsync(a.Uri, "C:\\" + a.Name);
while (wc.IsBusy)
{
System.Threading.Thread.Sleep(1000);
}
}
Однако существует несколько проблем с этим подходом:
Есть ли лучший подход для загрузки файлов по одному с помощью WebClient. DownloadFileAsync?
Спасибо!
Чтобы упростить задачу, которую вы можете создать разделенный список вложений:
list = new List<Attachment>(wi.Attachments);
где Список является частным полем с типом Список <Приложение> Отказ После этого вы должны настроить WebClient и начать загрузку первого файла:
if (list.Count > 0) {
WebClient wc = new WebClient();
wc.Credentials = (ICredentials)netCred;
wc.DownloadFileCompleted += new AsyncCompletedEventHandler(wc_DownloadFileCompleted);
wc.DownloadFileAsync(list[0].Uri, @"C:\" + list[0].Name);
}
Ваш обработчик DownloadFileComplete должен проверить, не все файлы уже загружаются и снова вызовут ShoeFiLeasync:
void wc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) {
// ... do something useful
list.RemoveAt(0);
if (list.Count > 0)
wc.DownloadFileAsync(list[0].Uri, @"C:\" + list[0].Name);
}
Этот код не является оптимизированным решением. Это просто идея.