批量处理任务进度条控制—基于BackgroundWorker
今天要做一个批量处理图层数据的功能,希望在处理任务过程中,各个任务都能在进度条中显示自己的当前进度,决定继续使用强大易用的BackgroundWorker组件。通过在RunWorkerCompleted事件中进行控制来达到各任务独立显示完成进度的目标。测试在之前的介绍BackgroundWork功能的测试代码基础上展开,测试例子截图如下:

分别向每个ListBox中写入1-100000的数字,向每个Listbox中写入过程中,进度条都自左向右走一遍,直到3个ListBox写入数字任务全部完成。代码如下:
public partial class Form1 : Form
{
List<ListBox> m_NumberBoxList = new List<ListBox>();//存放ListBox
ListBox m_CurrentListBox = null;//当前写入Items的ListBox
int m_CurrentListBoxIndex = ;//当前写入Items的ListBox的索引
public Form1()
{
InitializeComponent(); backgroundWorker1.WorkerReportsProgress = true;//报告完成进度
backgroundWorker1.WorkerSupportsCancellation = true;//允许用户终止后台线程
backgroundWorker1.DoWork += new DoWorkEventHandler(ListNumber); m_NumberBoxList.Add(listBox1);
m_NumberBoxList.Add(listBox2);
m_NumberBoxList.Add(listBox3);
} private void btnOk_Click(object sender, EventArgs e)
{
//向第一个ListBox写入数值
m_CurrentListBox = m_NumberBoxList[];
if (!backgroundWorker1.IsBusy)//判断backgroundWorker1是否正在运行异步操作
{
backgroundWorker1.RunWorkerAsync();//开始执行后台操作
}
} void ListNumber(object sender, DoWorkEventArgs e)
{
int num = (int)e.Argument;//接收传入的参数
for (int i = ; i <= num; i++)
{
if (backgroundWorker1.CancellationPending)//判断是否请求了取消后台操作
{
e.Cancel = true;
return ;
}
backgroundWorker1.ReportProgress(i * / num, i);//报告完成进度
System.Threading.Thread.Sleep();//后台线程交出时间片
}
} private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;//将完成进度数据传给进度条
m_CurrentListBox.Items.Add(e.UserState);//将中间计算结果在ListBox控件中显示出来
m_CurrentListBox.Update();//刷新ListBox
} private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
progressBar1.Value = ;
m_CurrentListBoxIndex++; if(m_CurrentListBoxIndex!=m_NumberBoxList.Count)
{
m_CurrentListBox = m_NumberBoxList[m_CurrentListBoxIndex];
if (!backgroundWorker1.IsBusy)//判断backgroundWorker1是否正在运行异步操作
{
backgroundWorker1.RunWorkerAsync();//开始执行后台操作
}
}
else
{
m_CurrentListBoxIndex = ;
MessageBox.Show("处理完成!");
}
} private void btnStop_Click(object sender, EventArgs e)
{
if (backgroundWorker1.WorkerSupportsCancellation == true)
{
backgroundWorker1.CancelAsync();//取消后台操作
backgroundWorker1.Dispose();//释放资源
}
}
}
运行过程截图如下:

批量处理任务进度条控制—基于BackgroundWorker的更多相关文章
- android97 播放音频 有进度条控制
package com.itheima.musicplayer; import android.os.Bundle; import android.os.Handler; import android ...
- Android开发 ---基本UI组件4:拖动事件、评分进度条、圆圈式进度条、进度条控制
Android开发 ---基本UI组件4 1.activity_main.xml 描述: 定义了一个按钮 <?xml version="1.0" encoding=" ...
- C# Oracle批量插入数据进度条制作
前言 由于项目需求,需要将Excel中的数据进过一定转换导入仅Oracle数据库中.考虑到当Excel数据量较大时,循环Insert语句效率太低,故采用批量插入的方法.在插入操作运行时,会造成系统短暂 ...
- 进度条--ProgressBar和BackgroundWorker
1) 需求:就餐打卡数据处理后,插入数据库中,用进度条显示过程 2) 思路:总进度为txt文本文件的行数(数据都是按照行写入),文本文件的大小 //BackgroundWorker对象有三个主要的事件 ...
- Android——进度条控制图片透明度
xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android= ...
- C#调用耗时函数时显示进度条浅探
最近在做一个VSS日志分析工具,使用C#进行开发,在完成了所有功能后,发现,从服务器下载VSS日志非常耗时,因为此,导致工具使用体验不好,所以,准备增加一个进度条.鉴于C#不经常使用,一下子搞个进度条 ...
- N 种仅仅使用 HTML/CSS 实现各类进度条的方式
本文将介绍如何使用 HTML/CSS 创建各种基础进度条及花式进度条及其动画的方式,通过本文,你可能可以学会: 通过 HTML 标签 <meter> 创建进度条 通过 HTML 标签 &l ...
- MFC 进度条控件
1.进度条 主要用来进行数据读写.文件拷贝和磁盘格式等操作时的工作进度提示情况,如安装程序等,伴随工作进度的进展,进度条的矩形区域从左到右利用当前活动窗口标题条的颜色来不断填充. 2.进度条控制在MF ...
- audio进度条
如上图所示:为效果图 代码如下: <!doctype html><html> <head> <meta name="author" con ...
随机推荐
- CCNA2.0笔记_STP
STP介绍 STP的主要任务是阻止在第二层网络(网桥或交换机)上产生网络环路(通过将特定的端口选为 Blocking state),来实现无环的拓扑 ; STP交换机之间使用Trunk连接 ; Cis ...
- org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class
转载自:http://songjianyong.iteye.com/blog/1663170 org.springframework.transaction.CannotCreateTransacti ...
- Nginx中修改php.ini的上传设置upload_max_filesize的值
普遍的网络越来越快,以前小家子气的2M上传限制慢慢变得不合时宜了.最近就把2M的限制直接提升到了20M...代码层面很快就修改好了,没什么可说的.但是上线的话还得修改一下服务器的配置.服务器是Ngin ...
- linux web.py spawn-fcgi web.py 配置
本来要用uwsgi,但是...介于以前说过...这台服务器略老...redhat 3的系统...确实很老,没法用yum,没法安装很多东西,打算自己编译uwsgi,但是编译各种错误...花了快一天,最后 ...
- spring 的redis操作类RedisTemplate
spring 集成的redis操作几乎都在RedisTemplate内了. 已spring boot为例, 再properties属性文件内配置好 redis的参数 spring.redis.host ...
- Oracle SQL Developer 日期格式显示设置
ORACLE的SQL Developer工具默认的日期格式DD-MON-RR,在SQL查询中经常需要查看详细的时间信息,默认的时间显示格式不能满足这一需要, 此时你必须修改日期格式.具体如下所示 工具 ...
- 当input被选中时候获取改input的多个属性值
<input name="selectTicket" class="selectTic" data-property="${couponDeta ...
- 当您尝试再次安装 SQL Server 时,SQL Server 2008年安装将会失败
症状 当您尝试在一台服务器上安装 Microsoft SQL Server 2008年时,则安装将失败.当您尝试在同一台服务器上重新安装 SQL Server 2008年的相同副本时,此安装也将失败. ...
- IntelliJ IDEA2017 java连接mysql数据库并查询数据
最近自己开始重新学习java基础了,做java开发不可避免要处理数据库,由于好久不写java了,对idea也有点陌生了.所以这里写篇用jdbc来连接mysql的文章 至于mysql怎么装,请自行百度 ...
- "_dns_free_resource_record", referenced from:问题
本文转载至 http://blog.csdn.net/woaifen3344/article/details/41309471 _dns_free_resource_r_dns_free环信SDK集成 ...