使用HttpClient和ProgressBar下载文件

时间:2020-06-30 07:40:36

标签: c#

您好,我正在学习如何使用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;
    }

1 个答案:

答案 0 :(得分:1)

Microsoft建议您don't use HttpWebRequest进行新开发;改用HttpClient。

使用HttpClient时,您可以像这样获得进度:Progress bar with HttpClient-本质上是逐步自己读取流,并计算与标头中声明的内容长度相比,您已阅读的内容。我可能会用布鲁诺的答案