c# BackgroundWorker组件介绍(属性、方法、事件)
在VS2005中添加了BackgroundWorker组件,该组件在多线程编程方面使用起来非常方便,然而在开始时由于没有搞清楚它的使用机制,走了不少的弯路,现在把我在使用它的过程中的经验与诸位分享一下。
BackgroundWorker类中主要用到的有这列属性、方法和事件: 重要属性: 1、CancellationPending 获取一个值,指示应用程序是否已请求取消后台操作。通过在DoWork事件中判断CancellationPending属性可以认定是否需要取消后台操作(也就是结束线程); 2、IsBusy 获取一个值,指示 BackgroundWorker 是否正在运行异步操作。程序中使用IsBusy属性用来确定后台操作是否正在使用中; 3、WorkerReportsProgress 获取或设置一个值,该值指示BackgroundWorker能否报告进度更新 4、WorkerSupportsCancellation 获取或设置一个值,该值指示 BackgroundWorker 是否支持异步取消。设置WorkerSupportsCancellation为true使得程序可以调用CancelAsync方法提交终止挂起的后台操作的请求; 重要方法: 1、CancelAsync 请求取消挂起的后台操作 2、RunWorkerAsync 提交一个启动以异步方式运行的操作的请求。发出该请求后,将引发 DoWork 事件,该事件随后开始执行后台操作。 3、ReportProgress 引发ProgressChanged事件 重要事件: 1、DoWork 调用 RunWorkerAsync 时发生 2、ProgressChanged 调用 ReportProgress 时发生 3、RunWorkerCompleted 当后台操作已完成、被取消或引发异常时发生 另外还有三个重要的参数是RunWorkerCompletedEventArgs以及DoWorkEventArgs、ProgressChangedEventArgs。 BackgroundWorker的各属性、方法、事件的调用机制和顺序: 从上图可见在整个生活周期内发生了3次重要的参数传递过程: 参数传递1:此次的参数传递是将RunWorkerAsync(Object)中的Object传递到DoWork事件的DoWorkEventArgs.Argument,由于在这里只有一个参数可以传递,所以在实际应用往封装一个类,将整个实例化的类作为RunWorkerAsync的Object传递到DoWorkEventArgs.Argument; 参数传递2:此次是将程序运行进度传递给ProgressChanged事件,实际使用中往往使用给方法和事件更新进度条或者日志信息; 参数传递3:在DoWork事件结束之前,将后台线程产生的结果数据赋给DoWorkEventArgs.Result一边在RunWorkerCompleted事件中调用RunWorkerCompletedEventArgs.Result属性取得后台线程产生的结果。 另外从上图可以看到DoWork事件是在后台线程中运行的,所以在该事件中不能够操作用户界面的内容,如果需要更新用户界面,可以使用ProgressChanged事件及RunWorkCompleted事件来实现。 明白了BagkgroundWorker的事件调用顺序和参数传递机制之后在使用该组件用于多线程编程的时候就可以轻松许多了。 |
转载于:https://www.cnblogs.com/fifastar/archive/2008/07/17/1244997.html
c# BackgroundWorker组件介绍(属性、方法、事件)相关推荐
- vb中mshflexgrid每格宽度_VB中MSHFLEXGRID常用的属性,方法事件
1) MSHFLEXGRID的重要属性. MSHFLEXGRID的属性非常多,其实绝大部分的属性和网格的显示的外观有关.在MSDN里,这些属性足以将人搞得眼花缭乱的了(我相信你没有耐性一个一个地翻查 ...
- vue2.0 配置 选项 属性 方法 事件 ——速查
全局配置 silent 设置日志与警告 optionMergeStrategies 合并策略 devtools 配置是否允许vue-devtools errorHandler 错误追踪 ...
- spreadsheet属性方法事件
Spreadsheet说明 ******************* 属性: ******************* 1.ActiveCell:返回代表活动单元格的Range只读对象. 2.Activ ...
- HTML5 Audio/Video 标签,属性,方法,事件汇总 (转)
2019独角兽企业重金招聘Python工程师标准>>> <audio> 标签属性:src:音乐的URLpreload:预加载autoplay:自动播放loop:循环播放c ...
- Winform使用BackgroundWorker组件进行异步编程
概述 在应用程序中,可能会遇到一些执行耗时的功能操作,比如数据下载.复杂计算及数据库事务等,一般这样的功能会在单独的线程上实现,执行结束后结果显示到用户界面上,这样可避免造成用户界面长时间无响应情况. ...
- DELPHI第三方控件及组件大全(安装方法与使用)
一,DELPHI第三方控件安装方法介绍 1.对于单个控件,Componet–>install component..–>PAS或DCU文件–>install; 2.对于带*.dpk文 ...
- uniapp使用悬浮窗组件添加点击事件的处理方法以及拖拽出界的问题
小程序/H5悬浮窗组件 基本介绍 当我们开发小程序或这app端的时候,有时候会遇到悬浮窗的需求.如果用原生Js写会异常的复杂,所以使用那些大佬们已经开发好的组件会使开发变得异常的简洁. 我刚来亚信实习 ...
- 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取 Activity 中的所有方法 | 获取方法上的注解 | 获取注解上的注解 | 通过注解属性获取事件信息 )
文章目录 前言 一.获取 Activity 中的所有方法 二.获取方法上的注解 三.获取注解上的注解 四.通过注解属性获取相关事件信息 前言 Android 依赖注入的核心就是通过反射获取 类 / 方 ...
- 【Android 应用开发】Android UI 设计之 TextView EditText 组件属性方法最详细解析
. 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/18964835 . TextView 相关类的继承结构 ...
最新文章
- 损失函数中正则化项L1和L2的理解
- php curl cookiejar,php使用CURL不依赖COOKIEJAR获取COOKIE的方法
- Spring 注入集合的成员变量属性
- Django开发中问题和报错集合
- python中计算DataFrame,Series的数据频率
- 紧张的337小时,终于等来了宇宙条字节跳动offer
- 面试题·HashMap和Hashtable的区别(转载再整理)
- 人工智能︱腾讯如何利用英特尔至强处理器在游戏内创建购买推荐系统?
- UltraEdit(ue记事本)科学免费激活使用教程【你懂得,亲测有效】
- 12306数据库遭泄露,请尽快修改密码
- iOS实现音频和视频播放-运用AVPlayer
- html5富文本编辑器菜鸟手册,富文本编辑器froalaEditor(全面)附教程
- 读书笔记5.4——《让数字说话:审计,就这么简单》:孙含晖
- 声网传输层协议 AUT 的总结与展望丨Dev for Dev 专栏
- 计算机毕业设计Java城市智能公交系统(源码+系统+mysql数据库+lw文档)
- mybatis中更新mysql时间多了一秒
- vivo手机怎么添加日程提醒?vivo手机添加日程方法
- 韩顺平Oracle笔记
- 新道格生日会 共悦生辰 美好同行
- 2022腾讯云年终双十一云服务器活动汇总