2009-06-11 3 views

Répondre

18

WebClient.UploadFileAsync vous permettra de le faire.

WebClient webClient = new WebClient(); 
webClient.UploadFileAsync(address, fileName); 
webClient.UploadProgressChanged += WebClientUploadProgressChanged; 

...

void WebClientUploadProgressChanged(object sender, UploadProgressChangedEventArgs e) 
{ 
     Console.WriteLine("Upload {0}% complete. ", e.ProgressPercentage); 
} 

Notez que le fil ne bloque pas le chargement plus, je vous recommande d'utiliser:

webClient.UploadFileCompleted += WebClientUploadCompleted; 

...

void WebClientUploadCompleted(object sender, UploadFileCompletedEventArgs e) 
{ 
    // The upload is finished, clean up 
} 
+0

Merci. Je travaille avec le multithreading, le téléchargement de fichier est déjà exécuté sur un thread différent. Donc devrais-je simplement utiliser la méthode Uploadfile ou la méthode UploadfileAsync? –

+0

Vous aurez toujours besoin de UploadFileAsync J'ai bien peur que le thread bloquera un appel à UploadFile pour que ces événements ne soient jamais appelés. Vous pouvez recréer votre propre blocage en définissant un indicateur booléen lorsque vous lancez le téléchargement, le réinitialiser dans uploadcomplete, puis thread.sleep jusqu'à ce que le drapeau soit effacé. –

+0

note: l'événement '' 'UploadProgressChanged''' ne fonctionne pas correctement avec la méthode' '' UploadDataAsync''' –

2

Ajoutez votre gestionnaire d'événements à WebClient.UploadProgressChanged et appelez WebClient.UploadFileAsync.

Voir la documentation WebClient.UploadProgressChanged pour un exemple.