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

推荐一种异步线程执行过程中更新进度的方法

在实际应用中,对于耗时较长或者耗费性能的操作,为了避免UI卡顿,通常采用后台异步线程的方式进行处理,但用户需要知道当前操作的执行进度(如当前进度百分比),以及一些更详细的过程信息(如共分5步,当前是正在执行第几步)等内容。实现此功能有很多种方法,今天介绍一种通过.NET自带的IProgress接口实现进度上报的操作方法,谨供学习分享使用,如有不足之处,还请指正。

image

 

IProgress概述

 

IProgress接口是微软在.NET Framework4.5及之后的版本中提供的一种用于异步方法中进度上报的方法接口及实现。IProgress<T>及它的实现类Progress<T>是泛型实现,它接收基础数据类型或自定义的引用类型。Progress<T>初始化对象时,接收一个Action<T> 的handler,当调用接口的Report(T value)方法时,就会执行Action<T>对应的handler委托方法进行更新进度。

涉及知识点如下:

  1. Report<T value> 用于向外报告一个进度更新。
  2. Progress(Action<T> handler) 实现类的构造函数,参数为更新进度的委托。

 

示例代码

 

在本示例中,创建Execute方法,模拟后台耗时较长的任务,并在执行过程中通过IProgress接口的Report方法上报执行进度。如下所示:

private async Task Execute(IProgress<TaskReport> progress)
{for (int i = 0; i < 100; i++){//do somthingawait Task.Delay(200);progress.Report(new TaskReport(){Percent=i,Msg=$"当前是第{i}个步骤,进行中"});}progress.Report(new TaskReport(){Percent=100,Msg="完成"});
}

接着创建IProgress的实例对象,并传入当Report方法调用时,需要执行的委托RefreshUI,用于刷新页面的进度,如下所示:

private async void btnExceute_Click(object sender, EventArgs e)
{IProgress<TaskReport> progress = new Progress<TaskReport>(RefreshUI);await Execute(progress);
}

其中RefreshUI方法,主要用于为UI页面上的进度条和Label赋值,如下所示:

private void RefreshUI(TaskReport taskReport)
{this.pb1.Value = taskReport.Percent;this.lblMsg.Text = taskReport.Msg;
}

 

演示效果

 

运行实例,点击执行按钮如下所示:

GIF 2025-11-9 21-45-40

以上就是《推荐一种异步线程执行过程中更新进度的方法》的全部内容,旨在抛砖引玉,一起学习,共同进步!

http://www.jsqmd.com/news/37013/

相关文章:

  • 2025 年 11 月食堂承包厂家推荐排行榜,学校食堂承包,工厂食堂承包,企业单位食堂承包,医院工地科技园食堂承包公司精选
  • 希尔排序快速排序归并排序
  • 2025 年 11 月电源适配器厂家推荐排行榜,12V2A电源适配器,12V电源适配器,24V电源适配器,笔记本电源适配器公司推荐
  • shadcn之表单
  • 2025 年 11 月粘度计厂家推荐排行榜,在线粘度计,旋转粘度计,振动粘度计,实验室旋转粘度计,反应釜在线粘度计公司推荐
  • Numpy - numpy.random.randn()
  • flask: 用Flask-Uploads实现文件上传
  • AI元人文:交织的智慧——应对价值困境的四条路径
  • 光学神经网络
  • 2025 年 11 月疥螨阴虱药剂厂家推荐排行榜,扑灭司林,苯甲酸苄酯,胺氯菊百灭宁,科灭达专业配方高效灭杀方案公司推荐
  • 黑马点评优雅关闭服务
  • 01-03 设计模式 - 导学
  • 35
  • 2025 年 11 月冲压件厂家推荐排行榜,新能源冲压件,光伏冲压件,精密冲压件,异形冲压件,五金冲压件,铝冲压件,汽配冲压件,不锈钢冲压件,家具冲压件公司推荐
  • Day17内容溢出overflow属性
  • 日总结 24
  • 谷歌广告生态指南:AdSense/GAM 接入避坑 + 填充监听 + 问题排查
  • P4511 日程管理
  • 11.10学习总结
  • 新编故事 | 噪音
  • Oracle数据库实例深度解析与实践指南
  • 2025 年 11 月流量计厂家推荐排行榜,热式/模拟式/数字式/高压/高温/耐腐蚀/多气体/4-20mA/RS485/分体式/不锈钢/高精度流量计公司推荐
  • 20232405 2024-2025-1 《网络与系统攻防技术》实验四实验报告
  • 2025 年 11 月聚氨酯厂家推荐排行榜,浇注型聚氨酯,聚氨酯预聚体,聚氨酯胶黏剂,聚氨酯组合料,聚氨酯密封,聚氨酯轮,聚氨酯胶辊,聚氨酯制品公司推荐
  • duckdb比sqlite大多了
  • 20232303 2025-2026-1 《网络与系统攻防技术》实验四实验报告
  • 2025 年 11 月氢氧化镁厂家推荐排行榜,矿石氢氧化镁,矿石法氢氧化镁,水镁石氢氧化镁,阻燃剂氢氧化镁,改性氢氧化镁公司推荐
  • 20232415 2025-2026-1 《网络与系统攻防技术》实验四实验报告
  • React:使用Tailwind CSS、Streamdown与Ant Design X
  • Day17清除默认样式