2009-08-01 9 views
1

VS 2008 SP1DownloadStringAysnc - ne montre pas la progression

J'utilise le DownloadStringAysnc. Mais l'événement ProgressChanged n'affiche pas de progression tant que la chaîne n'a pas été téléchargée.

Même lorsque j'essaie de télécharger une chaîne contenue dans un gros fichier. Les programmes restent une réponse, alors je sais que c'est en train de faire quelque chose. Cependant, c'est lorsque la progression est terminée que l'événement progressChanged se déclenche. J'ai connu cela comme le progressChanged et le feu DownloadStringCompleted immédiatement après l'autre. Cependant, ils devraient faire une pause car le fichier est assez gros.

Ceci est l'extrait de code que j'utilise actuellement. Et la sortie ci-dessous. Ce qui est étrange le e.progresspercentage est 100%. Et semble être appelé deux fois.

Un grand merci pour tout conseil,

Output in the progress changed event 
Progress changed Version userstate: [ Version1 ] 
progressBar1.Value [ 100 ] 
Progress changed Version userstate: [ Version1 ] 
progressBar1.Value [ 100 ] 
Completed Version userstate: [ Version1 ] 


private void UpdateAvailable() 
     { 
      WebClient wbCheckUpdates = new WebClient(); 
      wbCheckUpdates.DownloadProgressChanged += new DownloadProgressChangedEventHandler(wbCheckUpdates_DownloadProgressChanged); 
      wbCheckUpdates.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wbCheckUpdates_DownloadStringCompleted); 
      DownloadFiles df = new DownloadFiles(); 
      string webServerURL = df.webServerPath; 

      wbCheckUpdates.DownloadStringAsync(new Uri(Path.Combine(webServerURL, "version.txt")), "Version1"); 
     } 




void wbCheckUpdates_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) 
     { 
      Console.WriteLine("Progress version changed userstate: [ " + e.UserState + " ]"); 
      progressBar1.Value = e.ProgressPercentage; 
      Console.WriteLine("progressBar1.Value [ " + this.progressBar1.Value + " ]"); 
     } 

void wbCheckUpdates_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
     { 
      Console.WriteLine("Completed version userstate: [ " + e.UserState + " ]"); 
     } 

=========== édité à l'aide DownloadDataAysnc ===============

wbCheckUpdates.DownloadDataAsync(new Uri(Path.Combine(webServerURL, "version.txt")), "Version1"); 


void wbCheckUpdates_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e) 
     { 
      byte[] result = e.Result;   
      Console.WriteLine("Completed data: [ " + System.Text.ASCIIEncoding.Default.GetString(result) + " ]"); 
     } 

les résultats sont les mêmes:

Progress changed Version userstate: [ Version1 ] 
progressBar1.Value [ 100 ] 
Progress changed Version userstate: [ Version1 ] 
progressBar1.Value [ 100 ] 
Completed data: [ 1.0.11 ] 
+0

Juste curieux: dans votre code, avez-vous vraiment la signature de la méthode en retrait de huit espaces à partir des crochets? Chaque fois que j'ai vu cela auparavant, j'ai supposé que c'était une erreur d'entrer le code, mais je vois que vous l'avez partout. –

Répondre

2

Selon la documentation, DownloadStringAsync ne signale pas le progrès. Voir la documentation du WebClient.DownloadProgressChanged Event.

+1

Bonjour, je viens d'éditer mon code source dans ma question. Maintenant, j'utilise le DownloadDataAysnc. Comme d'après ce site web qui devrait montrer des progrès. Cependant, le résultat est le même. Merci. – ant2009

Questions connexes