实现在 .net 中使用 HttpClient 下载文件时显示进度

本文介绍了如何在.NET Framework和.NET Standard中使用HttpClient下载文件并显示进度。由于WebClient不在.NET Standard中,文章建议使用HttpClient的扩展方法,并提供了一个自定义的HttpDownloadProgress结构体来跟踪已下载和总字节数。通过GetAsync方法和HttpCompletionOption.ResponseHeadersRead选项获取content-length,然后使用缓冲区报告下载进度。示例代码展示了每8 KB数据下载时更新进度的方法。
摘要由CSDN通过智能技术生成

在 .net framework 中,要实现下载文件并显示进度的话,最简单的做法是使用 WebClient 类。订阅 DownloadProgressChanged 事件就行了。

但是很可惜,WebClient 并不包含在 .net standard 当中。在 .net standard 中,要进行 http 网络请求,我们用得更多的是 HttpClient。另外还要注意的是,UWP 中也有一个 HttpClient,虽然用法差不多,但是命名空间是不一样的,而且 UWP 的是可以支持获取下载进度的,这里就不再细说。

如果要下载文件,我们会使用到 HttpClient 的 GetByteArrayAsync 这个方法。要实现下载进度,那要怎么办呢?俗话说,不行就包一层。这里我们写个扩展方法,定义如下:

public static class HttpClientExtensions
{
    public static Task<byte[]> GetByteArrayAsync(this HttpClient client, Uri requestUri, IProgress<HttpDownloadProgress> progress, CancellationToken cancellationToken)
    {
        throw new
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值