批量处理任务进度条控制—基于BackgroundWorker
2013-10-22 13:37
183 查看
今天要做一个批量处理图层数据的功能,希望在处理任务过程中,各个任务都能在进度条中显示自己的当前进度,决定继续使用强大易用的BackgroundWorker组件。通过在RunWorkerCompleted事件中进行控制来达到各任务独立显示完成进度的目标。测试在之前的介绍BackgroundWork功能的测试代码基础上展开,测试例子截图如下:
View Code
运行过程截图如下:
public partial class Form1 : Form { List<ListBox> m_NumberBoxList = new List<ListBox>();//存放ListBox ListBox m_CurrentListBox = null;//当前写入Items的ListBox int m_CurrentListBoxIndex = 0;//当前写入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[0]; if (!backgroundWorker1.IsBusy)//判断backgroundWorker1是否正在运行异步操作 { backgroundWorker1.RunWorkerAsync(100000);//开始执行后台操作 } } void ListNumber(object sender, DoWorkEventArgs e) { int num = (int)e.Argument;//接收传入的参数 for (int i = 1; i <= num; i++) { if (backgroundWorker1.CancellationPending)//判断是否请求了取消后台操作 { e.Cancel = true; return ; } backgroundWorker1.ReportProgress(i * 100 / num, i);//报告完成进度 System.Threading.Thread.Sleep(0);//后台线程交出时间片 } } 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 = 0; m_CurrentListBoxIndex++; if(m_CurrentListBoxIndex!=m_NumberBoxList.Count) { m_CurrentListBox = m_NumberBoxList[m_CurrentListBoxIndex]; if (!backgroundWorker1.IsBusy)//判断backgroundWorker1是否正在运行异步操作 { backgroundWorker1.RunWorkerAsync(100000);//开始执行后台操作 } } else { m_CurrentListBoxIndex = 0; MessageBox.Show("处理完成!"); } } private void btnStop_Click(object sender, EventArgs e) { if (backgroundWorker1.WorkerSupportsCancellation == true) { backgroundWorker1.CancelAsync();//取消后台操作 backgroundWorker1.Dispose();//释放资源 } } }
View Code
运行过程截图如下:
相关文章推荐
- AJAX实现基于WEB的文件上传的进度控制
- AJAX和JSP实现的基于WEB的文件上传的进度控制代码第1/2页
- AJAX和JSP实现的基于WEB的文件上传的进度控制代码第1/2页
- 基于SmartThreadPool线程池技术实现多任务批量处理
- AJAX实现基于WEB的文件上传的进度控制
- AJAX实现基于WEB的文件上传的进度控制
- AJAX实现基于WEB的文件上传的进度控制
- 基于SmartThreadPool线程池技术实现多任务批量处理
- [转载]AJAX实现基于WEB的文件上传的进度控制
- AJAX实现基于WEB的文件上传的进度控制
- 基于Swift的iOS应用程序开发:使用表格显示并控制数据(三):批量处理表格数据
- 基于嵌入式操作系统VxWorks的多任务并发程序设计(2) ――任务控制
- AJAX+JSP实现基于WEB的文件上传的进度控制,作者:刘作晨
- ios开发视频播放后台下载功能实现 :1,ios播放视频 ,包含基于AVPlayer播放器,2,实现下载,iOS后台下载(多任务同时下载,单任务下载,下载进度,下载百分比,文件大小,下载状态)(真机调试功能正常)
- PythonPi基于人脸检测的行车控制-任务组件
- 基于嵌入式操作系统VxWorks的多任务并发程序设计(2) ――任务控制 分类: vxWorks 2014-03-12 09:43 481人阅读 评论(0) 收藏
- AJAX实现基于WEB的文件上传的进度控制
- AJAX实现基于WEB的文件上传的进度控制
- 基于嵌入式操作系统VxWorks的多任务并发程序设计(2) ――任务控制
- AJAX实现基于WEB的文件上传的进度控制