2010-12-02 12 views
0

Ich habe eine URL im Format http://ww.url.com/page?id=200. Dies wird eine Datei von 10 MB herunterladen. Allerdings bekomme ich den e.ProgressPercentage immer als 0. aber es trifft die Upload-Done-Funktion mit den tatsächlich gelesenen Ergebnissen.DownloadAsyncData des WebClients schlägt fehl

Bitte sagen Sie mir, was ich hier falsch mache.

Ich verwende den folgenden Code

private void button1_Click(object 
    sender, EventArgs e) 
{ 

    WebClient webClient = new WebClientEx(); 

    webClient.DownloadProgressChanged += 
     new DownloadProgressChangedEventHandler(wc_DownloadProgressChanged); 

    webClient.DownloadDataCompleted += new 
     DownloadDataCompletedEventHandler(wc_DownloadComplete); 

    webClient.DownloadDataAsync(new Uri("http://ww.url.com/page?id=200")); 


} 

public void wc_DownloadProgressChanged(Object sender, 
    DownloadProgressChangedEventArgs e) 

{ 
    Progress1.Value = e.ProgressPercentage; // this is 0 
} 

public void wc_DownloadComplete(Object sender,DownloadDataCompletedEventArgs e) 

{ 
    int a = 0; 
    this.Close(); 
} 
} } 
+0

Vielleicht ist es durch Ihre Formatierung verursacht (- :) –

+0

Und Vorsicht: Ihr CompletedEvent fehlt Fehlerbehandlung . –

Antwort

0

ProgressPercentage basiert auf der ContentLength in der Kopfzeile der Antwort zurückgegeben. Wenn die Antwort nicht weiß, wie groß der Download beim Zusammenstellen der Kopfzeile sein wird, können Sie den Fortschritt nicht abrufen.

Wenn dies einfach eine von IIS zurückgegebene Datei wäre, würde IIS die Größe der Datei aus dem Dateisystem abrufen und die Kopfzeile für Sie festlegen. Wenn die Antwort dynamisch ist und in den Puffer passt, könnte die Länge der Antwort festgelegt werden. Ich bin jedoch ziemlich sicher, dass die Standardpuffergröße weniger als 10 MB beträgt, so dass der Antwortheader zurück an den Client gesendet wird, bevor die Länge der Antwort bekannt ist.

In Asp.Net, würden Sie dies tun (wo Sie es auf Ihrer Plattform setzen abhängt) ...

Response.AddHeader("Content-Length", "10485760");