一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用BackgroundWorker来完成这一功能.

 
基本操作:
bgw.RunWorkerAsync() :
开始后台运行执行,
该函数后将触发bgw.DoWorker事件,需要执行的操作写在DoWorker事件响应函数里,
该函数也可以加参数,参数从DoWorker事件处理函数的e.Arguement里获取
 
bgw.CancelAsync() :
申请后台程序停止,
注意该函数不能实际停止后台程序,只能将bgw的CancellationPending 值设为true,需要自己在后台运行的程序中判断这一值,进而停止后台程序的运行.
注意本方法使用前,需要将bgw的WorkerSupportsCancellation 值设为true,否则将不起作用.
 
bgw.ReportProgress() :
在后台程序中调用,向主线程传送进度信息,
可以带一个或两个参数,一个为INT类型的进度(0~100),一个为自定义类型的参数,可以传任意信息.
调用后,将触发bgw.ProgressChanged事件,可以将界面变化的代码写在该事件响应函数中,之前提到的两个参数均可从bgw.ProgressChanged事件响应函数的参数e中获取,分别为e.ProgressPercentage和e.UserState.
注意本方法使用前,需要将bgw的WorkerReportsProgress值设为true,否则将不会触发事件.

开始后台运行:
  1. bgw= new BackgroundWorker();
  2. bgw.WorkerSupportsCancellation = true;
  3. bgw.WorkerReportsProgress = true;
  4. bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
  5. bgw.ProgressChanged += new ProgressChangedEventHandler(bgw_ProgressChanged);
  6. bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted);
  7. bgw.RunWorkerAsync();
 
DoWork事件处理函数:
  1. void bgw_DoWork(object sender, DoWorkEventArgs e)
  2. {
  3. StartProgress();
  4. }
 
WorkerCompleted事件处理函数(该函数在后台处理完成后被触发)
  1. void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  2. {
  3. MessageBox.Show("处理完成");
  4. }
 
ProgressChanged事件处理函数,
  1. void bgw_ProgressChanged(object sender, ProgressChangedEventArgs e)
  2. {
  3. if (e.UserState is int)
  4. {
  5. progressBar1.Value = (int)e.ProgressPercentage;
  6. label2.Text = e.UserState.ToString();
  7. }
  8. else if (e.UserState is List<object>)
  9. {
  10. List<object> tmp = (List<object>)e.UserState;
  11. progressBar1.Value = e.ProgressPercentage;
  12. label2.Text = tmp[0].ToString();
  13. this.label1.Text = tmp[1].ToString();
  14. this.listBox1.Items.Insert(0, tmp[2]);
  15. }
  16. }
 
后台运行的代码
  1. private void StartProgress()
  2. {
  3. //do sth
  4. bgw.ReportProgress(per,paraInt);
  5. }

BackgroundWorker的使用的更多相关文章

  1. C# BackgroundWorker 详解

    在C#程序中,经常会有一些耗时较长的CPU密集型运算,如果直接在 UI 线程执行这样的运算就会出现UI不响应的问题.解决这类问题的主要途径是使用多线程,启动一个后台线程,把运算操作放在这个后台线程中完 ...

  2. 【Winform】使用BackgroundWorker控制进度条显示进度

    许多开发者看见一些软件有进度条显示进度,自己想弄,项目建好后发现并没有自己想象中的那么简单...看了网上很多教程后,写了一个小Demo供网友们参考~~,Demo的网址:http://pan.baidu ...

  3. C# 多線程&BackgroundWorker概念入門教程

    感謝以下各位作者的貢獻~ 百度經驗舉了個例子,很好理解BackgroundWorker的用途(主要是用來啟動後台線程,而不阻塞調用程式的運行),收藏一下  http://jingyan.baidu.c ...

  4. 【C#】【Thread】BackgroundWorker的使用

    BackgroundWorker 可以用于启动后台线程. 主要的事件及参数: 1.DoWork --当执行BackgroundWorker.RunWorkerAsync方法时会触发该事件,并且传递Do ...

  5. 用于异步的BackgroundWorker

    XAML代码: <Window x:Class="backgroundtest.MainWindow" xmlns="http://schemas.microsof ...

  6. C# 使用BackgroundWorker例子及注意点

    该例子为使用BackgroundWorker在TextBox文本中产生一个10000以内并且能被5整除的数(1秒产生一个) 操作界面可以启动线程,也可以停止线程,界面设计如图: 先贴代码,有注释的地方 ...

  7. C# BackgroundWorker组件学习入门介绍

    C# BackgroundWorker组件学习入门介绍 一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用BackgroundWorker来完成这一功能 ...

  8. winform异步系统升级—BackgroundWorker

    BackgroundWorker用法实例 自己的代码,就是要执行的代码写到dowork里,ProgressChanged事件是控制进度时用的,最后的Completed事件进度完成,也就是dowork里 ...

  9. BackgroundWorker组件的作用

    当构建一个图形化的Windows Form桌面应用程序并且需要执行在应用程序主UI线程之外的线程中长时间的任务时,BackgroundWorker类就很有用了. 要使用BackgroundWorker ...

  10. C# BackgroundWorker的使用

    文章摘自:http://www.cnblogs.com/tom-tong/archive/2012/02/22/2363965.html BackgroundWorker 可以用于启动后台线程. 主要 ...

随机推荐

  1. 【Java 基础篇】【第三课】表达式、控制结构

    这两天再看敏捷开发流程,我这个算是敏捷博客吗? 哈哈o(∩_∩)o package a.b; public class Three { static void Expression() { Syste ...

  2. C#中扩展方法

    什么是扩展方法? 扩展方法顾名思义,就是允许向现有的“类型”添加方法,而无需创建派生类.重新编译或以其他方式修改原来类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用. 扩 ...

  3. 我的工具箱之FileZilla_3.11.0.1_win32-setup.1432524055

    FileZilla是用于在Win和Linux之间传递文件的工具,支持FTP和SFTP. 下载地址:http://pan.baidu.com/s/1gelyIYn 2016年3月2日10:29:30

  4. 30天,O2O速成攻略【8.15济南站】

    活动概况 时间:2015年08月15日13:30-16:30 地点:山东大学凤岐茶社(山东大学中心校区北门18号楼东连廊一层) 主办:APICloud.蚁巡 网址:www.apicloud.com 费 ...

  5. javascript实例学习之六—自定义日历控件

    基于之前上篇博客轻量级jquery,tool.js和base.js.自定义开发的base_datePicker插件,效果类似于jquery_ui的datePicker插件 //基于Base.js以及t ...

  6. UITextFiled

    - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...

  7. C# 6.0的新变化

    自动属性初始化 (Initializers for auto-properties) 以前我们是这么写的 为一个默认值加一个后台字段是不是很不爽,现在我们可以这样写 只读属性的初始化(Getter-o ...

  8. file operation note

    从HLE回来,大家拍了2499张照片,分放在N个文件夹下,下面的python将下层目录中文件移动到上层 import os,shutil dst=os.getcwd()+os.sep for path ...

  9. Java异步IO/NIO

  10. java collections读书笔记(10) Set

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVgAAADbCAIAAACnXR7VAAAgAElEQVR4nOx9d1hVV9Y3880zb2YmM3 ...