1 votes

DownloadStringAysnc - n'affiche pas la progression

VS 2008 SP1

J'utilise la fonction DownloadStringAysnc. Mais l'événement ProgressChanged n'affiche la progression qu'après le téléchargement de la chaîne.

Même lorsque j'essaie de télécharger une chaîne de caractères contenue dans un gros fichier. Le programme reste en réponse, donc je sais qu'il fait quelque chose. Cependant, c'est lorsque la progression est terminée que l'événement progressChanged se déclenche.

Je sais que cela est dû au fait que le progressChanged et le DownloadStringCompleted se déclenchent immédiatement l'un après l'autre. Cependant, il devrait y avoir une pause car le fichier est assez volumineux.

Voici l'extrait de code que j'utilise actuellement. Et le résultat ci-dessous. Ce qui est étrange, c'est que e.progresspercentage est à 100%. Et semble être appelé deux fois.

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

\=========== Modifié en utilisant 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 ]

2voto

John Saunders Points 118808

D'après la documentation, DownloadStringAsync ne signale pas de progression. Voir la documentation de la méthode Événement WebClient.DownloadProgressChanged .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X