当前位置:网站首页>C#控件 ToolStripProgressBar 用法
C#控件 ToolStripProgressBar 用法
2022-07-31 12:54:00 【黄昏和星空】
C# ToolStripProgressBar 用法简析
在处理的过程中耗时较长,因此想在窗体底部加一个进度条来指示处理的过程进度,发现有ToolStripProgressBar这么一个神奇的控件,可以方便的用来反映进度情况。但是对于如何使用,初次接触也是比较懵,因此习惯性的去MSDN查找了官方文档。果然官方文档给出了一个详细的例程,此处贴出链接:MSDN:
ToolStripProgressBar。
https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.forms.toolstripprogressbar?redirectedfrom=MSDN&view=windowsdesktop-6.0
使用方法
ProgressBar控件需要配合一个名为BackgroundWorker的Class配合使用。该类是一个可以独立于主线程工作的子线程,只要将需要用进度条指示的动作绑定到这个类中,并根据完成程度实时的对进度条进度值进行改写,即可实现进度条的同步显示。此处要注意的是,为了实时反映工作的进度,需要将BackgroundWorker的WorkerReportsProgress属性改为True。
主要需要对BackgroundWorker绑定以下三个事件:
开始工作的动作:DoWork
完成工作的动作:RunWorkerCompleted
工作中刷新的动作:ProgressChanged
首先来看一下如何绑定事件,这部分可以在视图设计器中进行绑定,也可以在实现的代码中手动绑定,此处示例在代码中手动绑定:
private void InitializeBackgroundWorker()
{
backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(
backgroundWorker1_RunWorkerCompleted);
backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(
backgroundWorker1_ProgressChanged);
}
1
2
3
4
5
6
7
8
开始工作DoWork
这里需要将用进度条指示的函数进行绑定,要注意,该函数需要有两个用于BackgroundWorker控制的参数传入,其中worker参数用于还原BackgroundWorker对象,而e参数可以指示动作完成的事件是如何被触发的(用户取消or动作完成)。因此函数定义格式应当如下:
private void DoSomething(BackgroundWorker worker, DoWorkEventArgs e)
1
在这个动作事件中需要进行两件事:第一,还原出worker;第二,调用DoSomething函数开始工作。代码参考如下:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
//还原worker对象
BackgroundWorker worker = sender as BackgroundWorker;
//开始工作
DoSomething(worker, e);
}
1
2
3
4
5
6
7
结束工作RunWorkerCompleted
这里用于指示工作结束时该如何进行下一步动作。并且可以根据传入的参数e来区分工作是中止或完成,以此来进行不同的“收尾”工作。代码参考如下:
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//还原Worker对象
BackgroundWorker worker = sender as BackgroundWorker;
//判断是否由错误造成意外中止
if (e.Error != null)
{
//若发生错误,弹窗显示错误信息
MessageBox.Show(e.Error.Message);
}
//判断是否用户手动取消,若程序要支持此处功能,需要程序中有cancel的动作,并在该动作中将e.cancel置为true
else if (e.Cancelled)
{
//添加用户手动取消的动作
MessageBox.Show(“Canceled”);
}
//判断是否正常结束
else
{
//添加正常结束之后的收尾动作
MessageBox.Show(“Complete”);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
工作中刷新ProgressChanged
针对加进度条这个目标来说,这里只要更新进度条的进度值即可。此处也可以加入用户在过程中需要实时刷新的内容。代码示例如下:
private void backgroundWorker1_ProgressChanged(object sender,ProgressChangedEventArgs e)
{
//更新进度条进度值
this.toolStripProgressBar1.Value = e.ProgressPercentage;
}
1
2
3
4
5
总结
案例下载
https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.backgroundworker?redirectedfrom=MSDN&view=net-6.0
边栏推荐
- PAT exam summary (exam experience)
- 线性表的基本概念
- /run/NetworkManager占用空间过大
- 跨境电商小知识之跨境电商物流定义以及方式讲解
- Centos7 install mysql5.7 steps (graphical version)
- SAP ABAP OData 服务如何支持 $filter (过滤)操作试读版
- Structural controllability of switched linear systems with symmetry constraints
- 电商rpa是什么意思?跟电商rpi是一个意思吗?
- 使用docker搭建mysql主从
- PHP序列化:eval
猜你喜欢

CWE4.8 -- 2022年危害最大的25种软件安全问题

SAP 电商云 Spartacus UI 和 Accelerator UI 里的 ASM 模块

ERROR 1064 (42000) You have an error in your SQL syntax; check the manual that corresponds to your

PyQt5 rapid development and actual combat 10.2 compound interest calculation && 10.3 refresh blog clicks

跨境电商小知识之跨境电商物流定义以及方式讲解

Full GC (Ergonomics)排查分析

字符函数和字符串函数

Spark GC日志分析

机器学习基本概念

【OpenCV】-边缘检测汇总示例
随机推荐
SAP 电商云 Spartacus UI 和 Accelerator UI 里的 ASM 模块
Introduction to using NPM
2022年最新重庆建筑安全员模拟题库及答案
Getting started with jmeter performance testing steps (performance testing tool jmeter)
函数的参数
NameNode故障处理的两种方法
电脑重要文件很多,如何备份比较安全?
Verilog——基于FPGA的贪吃蛇游戏(VGA显示)
Full GC (Ergonomics)排查分析
go中select语句
ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)解决办法
Encapsulation of conversion between Json and objects (Gson)
Selenium自动化测试之Selenium IDE
【OpenCV】-边缘检测汇总示例
全动力学约束的机器人高效时间最优轨迹规划
PyQt5快速开发与实战 9.7 UI层的自动化测试
Using SQL Server FOR XML and FOR JSON syntax on other RDBMSs with jOOQ
IDEA版Postman插件Restful Fast Request,细节到位,功能好用
PyQt5快速开发与实战10.2 复利计算 && 10.3 刷新博客点击量
CentOS7 installation MySQL graphic detailed tutorial