您好,我正在学习如何使用httpclient下载文件。 有人可以帮我更新进度条吗? 下载正在运行,但进度条不起作用。
我的进度条代码不起作用,它没有更新
async Task<string> GetWebSource(string url, string outputpath)
{
int count = 0;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CertificateValidationCallback);
string result = string.Empty;
try
{
HttpWebRequest request = await Task.Run(() => (HttpWebRequest)WebRequest.Create(url));
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
request.Proxy = null;
request.Method = "GET";
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36";
string output = Path.Combine(outputpath, GetFilenameFromUrl(url));
using (var httpWebResponse = await Task.Run(() => request.GetResponseAsync()))
{
using (var file = new FileStream(output, FileMode.Create, FileAccess.Write))
{
await Task.Run(() => httpWebResponse.GetResponseStream().CopyTo(file));
count++;
progressBar1.Value = (int)(count / (double)httpWebResponse.ContentLength * 100);
}
}
if (request != null)
{
request.Abort();
}
}
catch (Exception)
{
}
return result;
}
答案 0 :(得分:1)
Microsoft建议您don't use HttpWebRequest进行新开发;改用HttpClient。
使用HttpClient时,您可以像这样获得进度:Progress bar with HttpClient-本质上是逐步自己读取流,并计算与标头中声明的内容长度相比,您已阅读的内容。我可能会用布鲁诺的答案