Calcul du nombre total d’octets à télécharger à l’aide de WebClient ()

La variable ‘totalBytes’ est constamment à -1, donc je ne peux pas calculer / mettre à jour correctement la barre de progression, pourquoi cela se produirait-il?

private void button1_Click(object sender, EventArgs e) { WebClient client = new WebClient(); client.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed); client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged); client.DownloadFileAsync(new Uri("http://example.com/test.mp3"), @"E:\Test.mp3"); } private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e) { double bytesIn = double.Parse(e.BytesReceived.ToSsortingng()); label1.Text = Convert.ToSsortingng(bytesIn); double totalBytes = double.Parse(e.TotalBytesToReceive.ToSsortingng()); //stays at -1 label2.Text = Convert.ToSsortingng(totalBytes); double percentage = bytesIn / totalBytes * 100; label3.Text = Convert.ToSsortingng(percentage); progressBar1.Value = int.Parse(Math.Truncate(percentage).ToSsortingng()); } 

Un WebRequest WebClient utilise un WebRequest interne et le problème est probablement que le serveur à partir duquel vous téléchargez le fichier n’envoie pas l’en Content-Length tête HTTP Content-Length . Dans ce cas, vous devez utiliser un style Indeterminate ProgressBar (par exemple, Marquee).

Vous pouvez vérifier manuellement la longueur du contenu dans les en-têtes de réponse.

 client.ResponseHeaders["Content-Length"]