首页 程序笔记 C# winform实现文件下载进度条功能

C# winform实现文件下载进度条功能

C#在winform中使用HttpClient类来执行文件下载,并结合ProgressBar控件来显示进度条。

下面演示如何获取文件下载的状态并实现进度条功能:

using System;
using System.IO;
using System.Net.Http;
using System.Windows.Forms;

class Program
{
    static async void Main()
    {
        string fileUrl = "http://example.com/file.pdf";
        string destinationFilePath = "path/to/destination/file.pdf";

        // 创建进度条控件
        ProgressBar progressBar = new ProgressBar();
        progressBar.Minimum = 0;
        progressBar.Maximum = 100;

        // 创建HttpClient实例
        using (HttpClient client = new HttpClient())
        {
            // 发送GET请求并获取响应流
            using (HttpResponseMessage response = await client.GetAsync(fileUrl, HttpCompletionOption.ResponseHeadersRead))
            using (Stream contentStream = await response.Content.ReadAsStreamAsync())
            {
                // 获取文件总大小
                long? totalBytes = response.Content.Headers.ContentLength;

                // 创建目标文件流
                using (FileStream destinationStream = new FileStream(destinationFilePath, FileMode.Create, FileAccess.Write, FileShare.None))
                {
                    byte[] buffer = new byte[4096];
                    long totalBytesRead = 0;
                    int bytesRead;
                    while ((bytesRead = await contentStream.ReadAsync(buffer, 0, buffer.Length)) > 0)
                    {
                        // 写入目标文件
                        await destinationStream.WriteAsync(buffer, 0, bytesRead);

                        // 更新进度条
                        totalBytesRead += bytesRead;
                        if (totalBytes.HasValue)
                        {
                            int progressPercentage = (int)((totalBytesRead * 100) / totalBytes.Value);
                            progressBar.Value = progressPercentage;
                        }

                        // 可以在这里添加其他处理逻辑,比如取消按钮的检查

                        // 模拟一些延迟,以便能够看到进度条的更新
                        await System.Threading.Tasks.Task.Delay(100);
                    }
                }
            }
        }

        Console.WriteLine("文件下载完成");
        Console.ReadLine();
    }
}

示例中首先创建一个ProgressBar控件来显示进度条。

然后使用HttpClient类发送GET请求并获取响应流,还获取了文件的总大小(如果可用)。

在循环中读取响应流的数据,并将其写入目标文件流。

每次循环迭代中,更新进度条的值,以反映文件下载的进度。

可以在循环中添加其他处理逻辑,例如检查取消按钮的状态。

最后显示一个消息表示文件下载完成。

示例是一个控制台应用程序的示例。

如果要在Windows窗体应用程序中实现进度条功能,需要将代码与窗体应用程序的UI线程进行交互,以确保进度条的更新在UI上正确显示。

1

站心网

C#在winform中使用HttpClient类来执行文件下载,并结合ProgressBar控件来显示进度条。 下面演示如何获取文..

为您推荐

彩虹目录列表程序v1.5源码下载

彩虹目录列表是一款用PHP开发的目录列表程序,无需数据库,安装简单,使用方便。功能特点:在线预览图片、视频、音频、文本文件、Markdown文件、Office文档等自动识别目录下的README.md文件并展示(类GitHub)后台管..

如何设计功能测试用例

最近招聘面试测试工程师,发现很多测试工程师都是半路出家,对一些基本的测试概念,思路与技术没有认知。在设计测试用例的时候只是基于直觉与经验去测试。这就导致测试用例的设计既不全面,也不科学。一般功能测试指..

.NET 主程序的.dll.config文件有什么用?

.dll.config 文件通常是在开发过程中自动生成的,它的主要作用是为某个类库(.dll 文件)提供一个独立的配置文件,以便开发者可以为该类库单独定义或测试配置项。以下是生成 .dll.config 文件的原因和机制:1. 配置..

使用 html2canvas 实现截图功能

html2canvas 是一个开源的 JavaScript 库,用于将网页上的 HTML 元素渲染成图像。它通过遍历页面的 DOM 树和计算样式,然后将其绘制到 <canvas> 元素上,最终生成图片。该库不依赖服务器端,而是通过浏览器端的 Java..

网站统计中的访问信息收集的前端实现

网站数据统计分析工具是网站站长和运营人员经常使用的一种工具,比较常用的有谷歌分析、百度统计和腾讯分析等等。所有这些统计分析工具的第一步都是网站访问数据的收集。目前主流的数据收集方式基本都是基于javascri..

使用SuperWebSocket实现Web消息推送

在大部分Web系统中,我们可能遇到需要向客户端推送消息的需求。SuperWebSocket第三方库能让我们轻松的完成任务。SuperWebSocket第三方库可以从网上下载,不过通过Visual Studio Nuget安装更快。引用SuperWebSocket相..

.NET C# 使用Hook钩子实现全局监听键盘和鼠标

C# 是一种面向对象的编程语言,具有丰富的类库和工具支持,适用于各种类型的应用程序开发。Windows 提供了一种称为"钩子"(Hook)的机制,允许拦截并处理系统级别的事件,如键盘按键和鼠标移动。通过结合 C# 和 Hook..

.NET C#连接FTP实现文件上传下载

在 .NET 中可以使用 System.Net.FtpWebRequest 类来连接 FTP 服务器,实现文件上传和下载。以下是实现文件上传和下载的完整代码示例。1. 上传文件到 FTP 服务器using System;using System.IO;using System.Net;class..

C#使用 Attribute 实现 AOP 功能

在 C# 中,通过自定义 Attribute 并结合一些技术(如动态代理、反射等)可以实现 AOP(面向切面编程)。AOP 通常用于日志记录、性能监控、权限验证等横切关注点。以下是一个使用 C# Attribute 实现 AOP 功能的示例。..

.net 通过 HttpClient 下载文件同时报告进度的方法

通过 HttpClient 的 ContentLength 很多时候都可以拿到下载的内容的长度,通过 ReadAsync 可以返回当前读到的长度,将读取到的长度加起来就是已经下载的长度看起来很简单,于是直接给代码private static async Task ..

使用CSS columns-visibility实现砌体布局

CSS的 columns 属性(如 columns、column-count 和 column-width)通常用于多列文本布局,而不是直接用于砌体布局。然而,结合 columns 和 visibility 属性,可以在某些情况下实现类似砌体布局的效果,虽然它并不完..

ASP.NET如何将Views文件夹从项目分离

将 Views 文件夹从 ASP.NET 项目中分离是一个常见需求,比如为了实现模块化或分层架构。以下是实现此功能的完整步骤,从项目中分离 Views 文件夹,将其移到另一个独立的文件夹或项目中,并确保视图渲染仍然正常。1. ..

.NET C# 读取编辑.AVIF图片文件

在 .NET 中读取和编辑 .AVIF 图片文件需要特定的库支持,因为 System.Drawing 等内置功能不直接支持 AVIF 格式。目前可以通过以下方式在 .NET 中实现对 AVIF 文件的读取和编辑:方法一:使用 ImageMagick 的 .NET 封..

.NET C# SkiaSharp读取.AVIF图片文件报错

SkiaSharp 目前对 .AVIF 格式的支持可能依赖于具体的版本和底层库的配置。如果在使用 SkiaSharp 时尝试读取 .AVIF 文件报错,以下是一些可能的原因和解决方案:1. 检查 SkiaSharp 的版本SkiaSharp 的支持功能取决于..

无法加载文件或程序集 'XXXXX' 或其依赖项。访问被拒绝

遇到 “无法加载文件或程序集 'XXXXX' 或其依赖项。访问被拒绝” 错误时,通常是由于权限问题或文件夹、程序集引用配置不当所引起。下面是一些常见的原因及解决方法:1. 文件或程序集权限问题如果服务器或..

.NET 9 中System.Text.Json 的新增功能

在 .NET 9 中,System.Text.Json 进行了多个重要的更新和增强,进一步提升了 JSON 处理的性能、灵活性和易用性。以下是 .NET 9 中 System.Text.Json 的一些主要新增功能:1. 类型转换器 (Type Converters) 支持.NET ..

js使用IntersectionObserver实现锚点在当前页面视口时导读高亮

在 JavaScript 中可以通过监听页面滚动事件,检查每个锚点的位置,并根据当前滚动位置高亮相应的导航项,从而实现页面内锚点链接的导读高亮效果。交叉观察器 API(Intersection Observer API)提供了一种异步检测目..

js使用scroll事件实现锚点滚动到页面顶部时导航高亮

在 JavaScript 中,可以通过监听页面滚动事件,并判断页面顶部与各个锚点的距离来实现导航高亮效果。当某个锚点的内容块滚动到页面顶部时,自动高亮相应的导航项。以下是实现方式:1. HTML 结构假设我们有多个内容区..

.NET 9 即将推出的功能Task.WhenEach

.NET 爱好者!我刚刚偶然发现了一个非常酷的新 PR,它被合并到 .NET 运行时存储库中,我想分享一个例子。希望您能为新的 .NET 版本大肆宣传!在即将到来的 .NET 9 版本中,我们预计会有一个名为 .它在这里让您的异步..

文件上传JavaScript库FilePond使用教程

传统的文件上传控件往往显得笨拙且不够用户友好。FilePond的出现,为Web文件上传带来了革命性的改变。本文将详细介绍FilePond这一JavaScript库,探讨它如何优化文件上传流程,并提供无与伦比的用户体验。什么是FileP..

发表回复

返回顶部