Question

VS 2008 SP1

J'utilise DownloadStringAysnc. Mais l'événement ProgressChanged n'indique pas 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 qui est contenue dans un gros fichier. Les programmes restent la réponse alors je sais qu'il fait quelque chose. Cependant, c'est lorsque la progression est terminée que l'événement progressChanged est déclenché.

Je l'ai connu sous les noms progressChanged et DownloadStringCompleted immédiatement après l'autre. Cependant, ils devraient faire une pause car le fichier est assez volumineux.

Ceci est l'extrait de code que j'utilise actuellement. Et la sortie ci-dessous. Ce qui est étrange, le pourcentage e.progress est 100%. Et semble se faire appeler deux fois.

Merci beaucoup pour vos conseils,

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

=========== Edité à l'aide de 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 ]
Était-ce utile?

La solution

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top