Reputation: 3887
The variable 'totalBytes' is constantly at -1 so I cannot calculate/update the progress bar correctly, why would this be happening?
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.ToString());
label1.Text = Convert.ToString(bytesIn);
double totalBytes = double.Parse(e.TotalBytesToReceive.ToString()); //stays at -1
label2.Text = Convert.ToString(totalBytes);
double percentage = bytesIn / totalBytes * 100;
label3.Text = Convert.ToString(percentage);
progressBar1.Value = int.Parse(Math.Truncate(percentage).ToString());
}
Upvotes: 2
Views: 2901
Reputation: 13150
You can manually check for the Content-Length in the response headers
client.ResponseHeaders["Content-Length"]
Upvotes: 0
Reputation: 13670
A WebClient
uses a WebRequest
internally, and the problem is likely that the server you are downloading the file from is not sending the Content-Length
HTTP header, in which case you should use a Indeterminate
ProgressBar style (eg. Marquee).
Upvotes: 3