2010-11-13 15 views
3

J'ai un événement qui prend environ 10-30 secondes, à savoir télécharger des informations à partir d'une page (avec beaucoup de trafic), les modifier et les enregistrer quelque part sur le disque en utilisant WebClient. Parce que cela prend tellement de temps, je veux ajouter une barre de progression ou faire une étiquette de mise à jour (qui dit quelque chose comme la mise à jour ..) pour indiquer la progression.Barre de progression et client Web

Quelqu'un peut-il me guider sur la façon dont je ferais cela? Y a-t-il un événement dans le WebClient que je puisse utiliser pour gérer cela?

+0

http://sphotos.ak.fbcdn.net/hphotos-ak-snc4/hs892.snc4/72545_444026184526_748429526_5254434_3858588_n.jpg – Pedery

Répondre

16

Si vous écrivez une application client Windows Forms (pas un composant côté serveur ASP.NET), montrant la progression d'un téléchargement WebClient peut se faire comme suit:

WebClient webClient = new WebClient(); 
webClient.DownloadProgressChanged += (s, e) => 
{ 
    progressBar.Value = e.ProgressPercentage; 
}; 
webClient.DownloadFileCompleted += (s, e) => 
{ 
    progressBar.Visible = false; 
    // any other code to process the file 
}; 
webClient.DownloadFileAsync(new Uri("http://example.com/largefile.dat"), 
    @"C:\Path\To\Output.dat"); 

(progressBar est le ID d'un objet ProgressBar sur votre formulaire.)

+1

Quelle est la '(s, e)' bit ici faire? – Moshe

+4

@Moshe C'est une expression lambda (http://msdn.microsoft.com/fr-fr/library/bb397687.aspx) qui prend deux arguments; Ici, il est utilisé pour ajouter de manière concise un délégué anonyme en tant que gestionnaire d'événements. –