J'utilise le code ci-dessous pour télécharger plusieurs pièces jointes à partir d'un serveur TFS:WebClient.DownloadFileAsync - Télécharger des fichiers un à la fois
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);
}
Je voudrais télécharger plusieurs fichiers à l'aide DownloadFileAsync, mais je les veux être téléchargé un par un.
On peut demander "Pourquoi n'utilisez-vous pas simplement la méthode synchrone DownloadFile?" C'est parce que:
- Je veux utiliser les événements fournis par DownloadFileAsync.
- Je ne souhaite pas créer plusieurs instances de Webclient pour éviter d'inonder le serveur.
C'est la solution que je pensais:
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);
}
}
Cependant, il y a quelques problèmes avec cette approche:
- Le Thread.Sleep() est mon verrouillage Forme. Je dois encore créer mon propre thread ou utiliser BackgroundWorker. (Je voudrais éviter cela autant que possible)
- L'événement DownloadFileCompleted est déclenché après TOUS les fichiers ont été téléchargés. Je ne sais pas si cela est un effet secondaire de l'utilisation de System.Threading.Thread.Sleep (1000);
Existe-t-il une meilleure approche pour télécharger des fichiers un à la fois en utilisant WebClient.DownloadFileAsync?
Merci!
btw, vous pouvez utiliser 'System.IO.Path.Combinte (" C: ", a.Name"); ' – abatishchev
J'essaie mais certaines réponses ne sont tout simplement pas acceptables. – Ian
Vous pouvez résoudre le problème de blocage des threads en procédant comme suit: 'while (wc.IsBusy) {}'. De cette façon, tant que 'wc.IsBusy' est' true', l'exécution sera "bloquée" dans les accolades vides "ne rien faire". –