2010-12-02 33 views
0

J'ai un url dans le format http://ww.url.com/page?id=200. Cela va télécharger un fichier de 10 MB. Cependant, je reçois le e.ProgressPercentage comme 0 toujours. mais il frappe la fonction de téléchargement terminé avec les résultats réels lus.TéléchargerAsyncData de WebClient échoue

S'il vous plaît dites-moi ce que je fais mal ici.

J'utilise le code suivant

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

Peut-être est causé par la mise en forme (- :) –

+0

Et attention: Votre CompletedEvent manque ErrorHandling . –

Répondre

0

ProgressPercentage est basé sur le ContentLength retourné dans l'en-tête de la réponse. Si la réponse ne sait pas quelle sera la taille du téléchargement lors de la création de l'en-tête, vous ne pourrez pas obtenir de progression.

S'il s'agissait simplement d'un fichier renvoyé par IIS, IIS obtiendrait la taille du fichier à partir du système de fichiers et définirait l'en-tête pour vous. Si la réponse est dynamique et tient dans le tampon, la longueur de la réponse pourrait être définie. Cependant, je suis à peu près certain que la taille du tampon par défaut est inférieure à 10 Mo, donc l'en-tête de réponse est renvoyé au client avant que la longueur de la réponse ne soit connue.

En Asp.Net, vous devez faire cela (où vous mettez cela dépend de votre plate-forme) ...

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