批量处理任务进度条控制—基于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 ...
随机推荐
- mysql update语句添加表关联查询
UPDATE tab_game_version as a INNER JOIN tab_game_version as b ON a.id=b.idSET a.advert_data=0 where ...
- Discuz!X3.2修改用户名注册长度限制的方法
Discuz!X3.2用户名注册长度限制为15个字符,有些站长朋友觉得太短,需要改的长一点,但是很多人都不知道怎么修改,下面就告诉大家如何修改这个限制.按照以下步骤来就可以了! 1.打开 ) { ...
- Unity5.1 新的网络引擎UNET(四) UNET Remote Actions
孙广东 2015.7.12 网络系统 具有网络中执行操作actions 的方法.这些类型的actions 有时是调用远程过程调用(Remote Procedure Calls). 在网络系统中有两 ...
- Geek们为什么都用Linux?《完全使用Linux工作-王垠》读后记
真正开始使用Linux是从2013年某月看到王垠写的一篇<完全用Linux工作>,当时属于无比崇拜王垠的阶段,虽然在那之前常年都在电脑上装着双系统(linux,win),但linux也只能 ...
- 爬虫 (4)- Selenium与PhantomJS(chromedriver)与爬取案例
Selenium文档 Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器 ...
- 解决 Visual Studio For Mac 还原包失败问题
体验了一把改名部最新的杰作,总体感觉挺好,也能看出微软在跨平台这方面所做出的努力. 可能是预览版的缘故,还是遇到一个比较大的问题,创建netcore项目后,依赖包还原失败,错误信息如下: 可以先试着手 ...
- 第一百四十五节,JavaScript,同步动画
JavaScript,同步动画 将上一节的,移动透明动画,修改成可以支持同步动画,也就是可以给这个动画方法多个动画任务,让它同时完成 原理: 向方法里添加一个属性,这个属性是一个对象,同步动画属性,属 ...
- .NET开发笔记--对config文件的操作(3)
1.添加新节点前进行判断看是否已存在相同的属性值,若存在进行更新,不存在则进行添加操作. protected bool AddPizza() { //初始化id int newId; string f ...
- sql server生成不重复的时间字符串
),REPLACE(CONVERT(,),GETDATE()),'.',''))
- vim 命令大全(写的非常全和好)http://blog.csdn.net/woshixiaosimao/article/details/54312738
下文转自链接.由原作者陈皓译自<Learn ViM Progressively>,非常不错. ——————————正文开始—————————— 你想以最快的速度学习人类史上最好的文本编辑器 ...