当前位置:网站首页>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
边栏推荐
猜你喜欢
随机推荐
求一份常见Oracle故障模拟场景
基于稳态视觉诱发电位和注意力脑电的混合脑机接口系统
LRU缓存[线性表 -> 链表 -> hash定位 -> 双向链表]
ECCV2022:在Transformer上进行递归,不增参数,计算量还少!
WPF中TabControl动态获取当前选中的TabItem
认知—运动康复医疗机器人应用设计
Cognitive-exercise rehabilitation medical robot application design
带有对称约束切换线性系统的结构可控性
networkx绘制度分布
手撕Verilog PWM呼吸灯
Centos7 install mysql5.7 steps (graphical version)
Optimization of five data submission methods
系统集成项目管理工程师(软考中级)知识点总结【挣值分析】【关键路径】
SAP message TK 248 solved
小试牛刀—猜数字游戏
PAT考试总结(考试心得)
365-day challenge LeetCode1000 questions - Day 044 Maximum element in the layer and level traversal
基于姿态估计的护具佩戴检测与动作识别
Banyan Tree Loan GPU Hardware Architecture
基本语法(二)









![LRU缓存[线性表 -> 链表 -> hash定位 -> 双向链表]](/img/ad/dd80541514d6fedde8c730218fdf5a.png)