2009-08-01 2 views
1

VS 2008 SP1DownloadStringAysnc - zeigt Fortschritt nicht an

Ich verwende den DownloadStringAysnc. Das ProgressChanged-Ereignis zeigt den Fortschritt jedoch erst an, nachdem die Zeichenfolge heruntergeladen wurde.

Auch wenn ich versuche, eine Zeichenfolge herunterzuladen, die in einer großen Datei enthalten ist. Die Programme bleiben Antwort, so weiß ich, dass es etwas tut. Wenn der Vorgang abgeschlossen ist, wird das Ereignis progressChanged jedoch ausgelöst.

Ich kenne dies als das progressChanged und das DownloadStringCompleted Feuer unmittelbar hintereinander. Sie sollten jedoch eine Pause sein, da die Datei ziemlich groß ist.

Dies ist das Code-Snippet, das ich gerade verwende. Und die Ausgabe unten. Was seltsam ist, ist der e.progresspercentage 100%. Und scheint zweimal angerufen zu werden.

Vielen Dank für jede Beratung,

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 + " ]"); 
     } 

=========== Edited DownloadDataAysnc =============== mit

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) + " ]"); 
     } 

die Ergebnisse sind die gleichen:

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

Nur neugierig: Haben Sie wirklich in Ihrem Code die Methodensignatur eingerückt acht Leerzeichen aus den Klammern? Wann immer ich das vorher gesehen habe, nahm ich an, dass es ein Fehler war, den Code einzugeben, aber ich sehe, dass du es überall hast. –

Antwort

2

Gemäß der Dokumentation, wird DownloadStringAsync nicht Fortschritte berichten. Siehe die Dokumentation des WebClient.DownloadProgressChanged Event.

+1

Hallo, ich habe gerade meinen Quellcode in meiner Frage bearbeitet. Jetzt benutze ich den DownloadDataAysnc. Wie laut dieser Website sollte der Fortschritt zeigen. Das Ergebnis ist jedoch das gleiche. Vielen Dank. – ant2009