我正在使用WebClient
类从Web服务器下载.exe文件。这是我用来下载文件的代码:
WebClient webClient = new WebClient();
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged);
webClient.DownloadDataAsync(new Uri("http://www.blah.com/calc.exe"));
我的应用程序有一个ProgressBar,它在回调(webClient_DownloadProgressChanged
)中得到更新:
private void webClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
progressBar.Value = (int)e.BytesReceived;
}
我遇到的问题是我必须动态设置进度条的Maximum
值。换句话说,在下载开始之前,我需要知道我正在下载的文件的大小。
有没有办法获得文件的大小(在下载之前),因为它是uri?
答案 0 :(得分:4)
尝试将最大尺寸设置为e.TotalBytesToReceive,如下所示
private void webClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
progressBar.Max = (int)e.TotalBytesToReceive;
progressBar.Value = (int)e.BytesReceived;
}
答案 1 :(得分:2)
其中一种方法是检查ResponseHeaders中的Content-Length或Range标头。
// To set the range
//webClient.Headers.Add("Range","bytes=-128");
// To read Content-Length
var bytes = Convert.ToInt64(webClient.ResponseHeaders["Content-Length"]);
答案 2 :(得分:2)
如果您只需要正确更新进度条,最简单的方法是使用ProgressPercentage
// progressBar.Max is always set to 100
progressBar.Value = e.ProgressPercentage;