当前位置: 首页 > news >正文

网络编程 —— Http进度条

第一种下载带进度的方法

string url = "https://nodejs.org/dist/v20.10.0/node-v20.10.0-x64.msi";

1使用getASync获取服务器响应数据

参数1请求的路径,
            参数2 HttpCompletionOption.ResponseHeadersRead 请求完成时候等待请求带什么程度才代表请求成功
            ResponseHeadersRead 读取到响应头的时候算是请求完成, 响应头有个字段可以获取资源大小
            ResponseContentRead 读取到整个响应内容算是请求完成

HttpResponseMessage res = await new HttpClient().GetAsync(url,HttpCompletionOption.ResponseHeadersRead);
2 获取url的文件名称
 string fileName = Path.GetFileName(url);
3 将响应数据读取带stream对象中
Stream stream =  await res.Content.ReadAsStreamAsync();
4 记录响应数据的总大小 在响应头里面有一个ContentLength字段获取响应大小也就是下载的总大小
long all =  res.Content.Headers.ContentLength ?? 0;
6 定义一个字节数组 字节数组容量是8KB的大小
byte[] bytes = new byte[1024*8];

           从数据流读取到字节数组,并且从0开始读取,到字节数组被容纳完为止
           返回值是整型的,代表是读取的位置
           stream.Read(bytes, 0, bytes.Length); 

int nowReadCount = 0; //当前读取的位置

如果读取的位置不为0,证明还有数据,还得再次读取数据

while((nowReadCount = stream.Read(bytes, 0, bytes.Length))!=0)
{// 读取数据 //b把当前读取的数据写入本地fs.Write(bytes, 0, nowReadCount);loadByte += nowReadCount;// 记录总下载量Console.WriteLine(loadByte);//用已经下载量/总量 *100 转成百分制度。double progress = (double)loadByte /(double) all * 100;this.progressBar1.Value = (int)progress;
}
fs.Close();
MessageBox.Show("下载完成");

安装第三方,Microsoft.AspNet.WebApi.Client,
提供了一个下载事件,在事件函数可以获取下载进度

1创建httpclientHandler 事件对象
HttpClientHandler handler = new HttpClientHandler();

2 创建下载进度的事件对象

ProgressMessageHandler pro = new ProgressMessageHandler(handler);

3 创建下载进度的事件函数

 pro.HttpReceiveProgress += Pro_HttpReceiveProgress;

  Pro_HttpReceiveProgress类

private void Pro_HttpReceiveProgress(object sender, HttpProgressEventArgs e)
{Console.WriteLine(e.ProgressPercentage);//记录当前的进度//Invoke调用一个方法this.Invoke((Action) (() =>{this.progressBar1.Value = e.ProgressPercentage;}));
}
4 创建请求对象并且发请求,获取响应 目的是为了通知下载进度对象,再触发对应的Pro_HttpReceiveProgress函数
 HttpClient client = new HttpClient(pro);
var res = await  client.GetAsync("https://nodejs.org/dist/v20.10.0/node-v20.10.0-x64.msi");
5 读取响应数据写入本地
var stream = await res.Content.ReadAsStreamAsync();
var fs = new FileStream("node.msi", FileMode.Create);
fs.CopyTo(fs);
fs.Close();
stream.Close();

http://www.lryc.cn/news/355088.html

相关文章:

  • 5月26(信息差)
  • 【Redis】持久化操作详解
  • C#调用HttpClient.SendAsync报错:System.Net.Http.HttpRequestException: 发送请求时出错。
  • 大模型基础知识
  • 时间序列预测模型实战案例(三)(LSTM)(Python)(深度学习)时间序列预测(包括运行代码以及代码讲解)
  • [8] CUDA之向量点乘和矩阵乘法
  • 音视频开发9 FFmpeg 解复用框架说明,重要知识点
  • 抖音小店出单之后怎么发货?抖店详细发货流程来了
  • Transformer详解(5)-编码器和解码器
  • 线程安全-3 JMM
  • 4 CSS的 变换、过渡与动画
  • 前端基础入门三大核心之JS篇:掌握数字魔法 ——「累加器与累乘器」的奥秘籍【含样例代码】
  • git clone 出现的问题
  • Vue2和Vue3生命周期的对比
  • 全面解析Java.lang.ClassCastException异常
  • 美团Java社招面试题真题,最新面试题
  • 二十八、openlayers官网示例Data Tiles解析——自定义绘制DataTile源数据
  • 分布式事务解决方案(最终一致性【TCC解决方案】)
  • App Inventor 2 Encrypt.Security 安全性扩展:MD5哈希,SHA/AES/RSA/BASE64
  • 深入了解Linux中的环境变量
  • 雷军-2022.8小米创业思考-8-和用户交朋友,非粉丝经济;性价比是最大的诚意;新媒体,直播离用户更近;用真诚打动朋友,脸皮厚点!
  • 【Vue2.x】props技术详解
  • C语言例题46、根据公式π/4=1-1/3+1/5-1/7+1/9-1/11+…,计算π的近似值,当最后一项的绝对值小于0.000001为止
  • fpga系列 HDL: 05 阻塞赋值(=)与非阻塞赋值(<=)
  • 大白话DC3算法
  • 力扣HOT100 - 75. 颜色分类
  • Vue.js - 计算属性与侦听器 【0基础向 Vue 基础学习】
  • 技术速递|使用 C# 集合表达式重构代码
  • 我的世界开服保姆级教程
  • [转载]同一台电脑同时使用GitHub和GitLab