网络编程 —— 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.mzph.cn/bicheng/17250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

耐高温输送带的优势

耐高温输送带:工业运输的革命性升级,助力生产线高效稳定运行 在现代化工业生产的浪潮中,耐高温输送带以其独特的优势,正逐渐成为工业运输领域的得力助手。它不仅能够有效提升生产效率,更能确保生产线的安全稳定运行&a…

算法随想录第二十天打卡|654.最大二叉树 , 617.合并二叉树 ,700.二叉搜索树中的搜索 , 98.验证二叉搜索树

654.最大二叉树 又是构造二叉树,昨天大家刚刚做完 中序后序确定二叉树,今天做这个 应该会容易一些, 先看视频,好好体会一下 为什么构造二叉树都是 前序遍历 题目链接/文章讲解:代码随想录 视频讲解:又是构…

「动态规划」打家劫舍

力扣原题链接,点击跳转。 有一个小偷,要偷东西。假设有n个房间,每个房间都有现金,下标为i的房间内的现金数是nums[i]。不能同时偷相邻的2个房间,其中第一个房间和最后一个房间是相邻的。那么这个小偷最多能偷到多少现…

YOLOv8+PyQt5鸟类检测系统完整资源集合(yolov8模型,从图像、视频和摄像头三种路径识别检测,包含登陆页面、注册页面和检测页面)

资源包含可视化的鸟类检测系统,基于最新的YOLOv8训练的鸟类检测模型,和基于PyQt5制作的可视化鸟类检测系统,包含登陆页面、注册页面和检测页面,该系统可自动检测和识别图片或视频当中出现的各种鸟类,以及自动开启摄像头…

Linux汉化Jupyter Notebook

要在Linux系统中使Jupyter Notebook汉化,可以通过安装jupyterlab-language-pack-zh-CN扩展来实现。以下是具体步骤和示例代码: 打开终端。 执行以下命令以安装Jupyter Notebook的中文语言包: pip install jupyterlab-language-pack-zh-CN …

【CSharp】将ushort数组保存为1通道位深16bit的Tiff图片

【CSharp】将ushort数组保存为1通道位深16bit的Tiff图片 1.背景2.接口 1.背景 System.Drawing.Common 是一个用于图像处理和图形操作的库,它是 System.Drawing 命名空间的一部分。由于 .NET Core 和 .NET 5 的跨平台特性,许多以前内置于 .NET Framework…

基于Fluent和深度学习算法驱动的流体力学计算与应用

“基于Fluent和深度学习算法驱动的流体力学计算与应用”专题大纲 目录 主要内容 机器学习与流体力学入门 一、流体力学基础理论与编程实战1、流体力学的发展概述 2、不可压缩流体力学的基本方程 3、湍流理论与湍流模型简介 4、傅里叶变换和流体的尺度分析 5、伪谱法求解不可压…

Vue小程序项目知识积累(二)

1.wx.reLaunch(Object object) 关闭所有页面,打开到应用内的某个页面。 wx.reLaunch({url:/pages/positons/index}) 参数说明: 属性类型默认值必填说明urlstring是需要跳转的应用内页面路径 (代码包路径),路径后可以带参数。参数与路径之…

微信小程序上传包过大的最全解决方案!

微信小程序的发布大小限制是2MB。然而一个程序怎么能这么小? 介绍一下项目中的经验。 新项目 如果是刚开始做的新项目,一定确定好自己要用的Ui框架,而且确定之后,千万不要引入别的,否则占大小!&#xff0…

HNCTF

HNCTF 文章目录 HNCTFBabyPQEZmathez_Classicf(?*?)MatrixRSABabyAESIs this Iso? BabyPQ nc签到题,跟端口连接拿到n和phin n 8336450100232098099043686671148282601664696810002345240872579498695511770993195704402414029892029461830476866385453475141207…

【开源】加油站管理系统 JAVA+Vue.js+SpringBoot+MySQL

目录 一、项目介绍 论坛模块 加油站模块 汽油模块 二、项目截图 三、核心代码 一、项目介绍 Vue.jsSpringBoot前后端分离新手入门项目《加油站管理系统》,包括论坛模块、加油站模块、汽油模块、加油模块和部门角色菜单模块,项目编号T003。 【开源…

如何使用jQuery重定向到另一个网页

在我们开始讨论如何重定向到另一个网页之前,必须明确一点:jQuery 是一个用于 DOM 操作的 JavaScript 库,因此你不应该使用 jQuery 来实现页面重定向。 jQuery 官方网站的某段话: 虽然 jQuery 可能能够在较旧的浏览器版本中运行,但我们并没有主动在这些版本中进行测试,也…

矩阵对角化在机器学习中的奥秘与应用

在机器学习的广阔领域中,矩阵对角化作为一种重要的数学工具,扮演着不可或缺的角色。从基础的线性代数理论到复杂的机器学习算法,矩阵对角化都在其中发挥着重要的作用。 矩阵对角化的概念与原理 矩阵对角化是矩阵理论中的一个基本概念&#x…

vue.config.js配置参考(2024-05-20)

vue.config.js 是一个可选的配置文件,如果项目的 (和 package.json 同级的) 根目录中存在这个文件,那么它会被 vue/cli-service 自动加载。 你也可以使用 package.json 中的 vue 字段,但是注意这种写法需要你严格遵照 JSON 的格式来写。 这…

综合布线管理软件有何作用?

当客户问及“综合布线管理软件究竟有何作用?” 我们通常这样回答: 综合布线管理软件,作为运维管理的得力助手,其核心功能旨在确保布线系统的稳定运行与快速响应。 首先,这款软件通过构建标准化的运维管理流程&#…

Qt for Android

文章 USB Qt for android 获取USB设备列表(一)Java方式 获取 Qt for android 获取USB设备列表(二)JNI方式 获取 Qt for android 串口库使用 异常处理 Qt for Android 乱码问题 andoid开发文档 UsbManager(apiref.…

四川汇聚荣科技有限公司好不好?

在当今科技飞速发展的时代,企业要想在激烈的市场竞争中脱颖而出,不仅需要先进的技术支持,还需要优质的服务和良好的口碑。那么,四川汇聚荣科技有限公司是否具备这些条件呢?接下来,我们将从公司实力、服务质量、客户反…

win10换ubuntu

1.首先是格式化windows系统,这里用的是恢复出厂设置 2.然后按照下面教程使用u盘来安装ubuntuUbuntu 20.04.2.0 LTS 系统安装过程详解 (从下载镜像到安装系统)_ubuntu安装教程20.04-CSDN博客 3.然后下面是一些别的准备工作: 1)安…

如何根据系统的业务场景需求定制自己的线程池?

如何根据系统的业务场景需求定制自己的线程池? 1、背景2、生产中应当如何使用线程池才比较合理呢?2.1、指定线程数量2.2、选择合适的工作队列2.3、自定义线程工厂2.4、选择合适的拒绝策略3、自定义线程池代码案例1、背景 线程池有那么多的参数和类型,在实际的开发中,我们应…

达梦授权某个模式给其它用户只读权限

为了在生产环境中将SZSJTJFX模式下的所有对象的只读权限授予XXXX的账号SZJG_CPZLJD,可以通过以下分批处理的脚本来完成。此脚本会遍历SZSJTJFX模式下的所有表和视图,并生成相应的GRANT语句,以避免“过多的对象名前缀”错误。 分批处理的动态…