BackgroundWorker 小结
来源:互联网 发布:中国原油10月进口数据 编辑:程序博客网 时间:2024/06/07 21:53
在 WinForms 中,有时要执行耗时的操作,在该操作未完成之前操作用户界面,会导致用户界面停止响应。
解决的方法就是新开一个线程,把耗时的操作放到线程中执行,这样就可以在用户界面上进行其它操作。
新建线程可以用 Thread 类,可以实现多线程同时操作,简单的可以通过 BackgroundWorker 类实现。
BackgroundWorker 类在 System.ComponentModel 命名空间下。
VS 的工具箱有一个 BackgroundWorker 组件,就是这个类。
常用方法
1.RunWorkerAsync
开始执行后台操作,引发 DoWork 事件。该方法有两个重载RunWorkerAsync(), RunWorkerAsync(object argument),第二个重载提供了一个参数,可以传递给DoWork 事件,DoWork事件的Argument参数将接收RunWorkerAsync(object argument)传递的参数。(如果有多个参数要传递怎么办,使用一个类来传递他们吧)
2.CancelAsync
请求取消挂起的后台操作。
注意:这个方法是将 CancellationPending 属性设置为 true,并不会终止后台操作。在后台操作中要检查 CancellationPending 属性,来决定是否要继续执行耗时的操作。
3.ReportProgress
引发 ProgressChanged 事件。该方法有两个重载ReportProgress(int percentProgress), ReportProgress(int percentProgress, object userState),ProgressChanged 事件的ProgressPercentage 和 UserState 属性将接收ReportProgress方法传递的参数
常用属性
1.CancellationPending
指示应用程序是否已请求取消后台操作。
只读属性,默认为 false,当执行了 CancelAsync 方法后,值为 true,当后台线程运行完成会自动将该属性设置为 false。
2.WorkerSupportsCancellation
指示是否支持异步取消。要执行 CancelAsync 方法,需要先设置该属性为 true。
3.WorkerReportsProgress
指示是否能报告进度。要执行 ReportProgress 方法,需要先设置该属性为 true。
4.IsBusy
指示后台线程是否运行中。
常用事件
1.DoWork
调用 RunWorkerAsync 方法时发生。通常将需要执行的后台程序放在DoWork事件的处理函数内,在后台程序结束时还可给DoWork事件的Result属性赋值,该属性将会被传递到RunWorkerCompleted事件的Result属性
2.RunWorkerCompleted
后台操作已完成、被取消或引发异常时发生。
3.ProgressChanged
调用 ReportProgress 方法时发生。
在 DoWork 事件处理程序中不操作任何用户界面对象。而应该通过 ProgressChanged 和 RunWorkerCompleted 事件与用户界面进行通信。
如果想在 DoWork 事件处理程序中和用户界面的控件通信,可调用 ReportProgress 方法。
简单的程序用 BackgroundWorker 比 Thread 方便,Thread 中和用户界面上的控件通信比较麻烦,需要用委托来调用控件的 Invoke 或 BeginInvoke 方法,没有 BackgroundWorker 方便。
解决的方法就是新开一个线程,把耗时的操作放到线程中执行,这样就可以在用户界面上进行其它操作。
新建线程可以用 Thread 类,可以实现多线程同时操作,简单的可以通过 BackgroundWorker 类实现。
BackgroundWorker 类在 System.ComponentModel 命名空间下。
VS 的工具箱有一个 BackgroundWorker 组件,就是这个类。
常用方法
1.RunWorkerAsync
开始执行后台操作,引发 DoWork 事件。该方法有两个重载RunWorkerAsync(), RunWorkerAsync(object argument),第二个重载提供了一个参数,可以传递给DoWork 事件,DoWork事件的Argument参数将接收RunWorkerAsync(object argument)传递的参数。(如果有多个参数要传递怎么办,使用一个类来传递他们吧)
2.CancelAsync
请求取消挂起的后台操作。
注意:这个方法是将 CancellationPending 属性设置为 true,并不会终止后台操作。在后台操作中要检查 CancellationPending 属性,来决定是否要继续执行耗时的操作。
3.ReportProgress
引发 ProgressChanged 事件。该方法有两个重载ReportProgress(int percentProgress), ReportProgress(int percentProgress, object userState),ProgressChanged 事件的ProgressPercentage 和 UserState 属性将接收ReportProgress方法传递的参数
常用属性
1.CancellationPending
指示应用程序是否已请求取消后台操作。
只读属性,默认为 false,当执行了 CancelAsync 方法后,值为 true,当后台线程运行完成会自动将该属性设置为 false。
2.WorkerSupportsCancellation
指示是否支持异步取消。要执行 CancelAsync 方法,需要先设置该属性为 true。
3.WorkerReportsProgress
指示是否能报告进度。要执行 ReportProgress 方法,需要先设置该属性为 true。
4.IsBusy
指示后台线程是否运行中。
常用事件
1.DoWork
调用 RunWorkerAsync 方法时发生。通常将需要执行的后台程序放在DoWork事件的处理函数内,在后台程序结束时还可给DoWork事件的Result属性赋值,该属性将会被传递到RunWorkerCompleted事件的Result属性
2.RunWorkerCompleted
后台操作已完成、被取消或引发异常时发生。
3.ProgressChanged
调用 ReportProgress 方法时发生。
在 DoWork 事件处理程序中不操作任何用户界面对象。而应该通过 ProgressChanged 和 RunWorkerCompleted 事件与用户界面进行通信。
如果想在 DoWork 事件处理程序中和用户界面的控件通信,可调用 ReportProgress 方法。
简单的程序用 BackgroundWorker 比 Thread 方便,Thread 中和用户界面上的控件通信比较麻烦,需要用委托来调用控件的 Invoke 或 BeginInvoke 方法,没有 BackgroundWorker 方便。
0 0
- BackgroundWorker 小结
- BackgroundWorker
- BackgroundWorker
- BackgroundWorker
- BackgroundWorker
- .NET BackgroundWorker
- About BackgroundWorker
- BackgroundWorker 类
- BackgroundWorker 类
- BackgroundWorker 类
- BackgroundWorker 类
- backgroundworker类
- 再小谈backgroundWorker
- BackgroundWorker类
- BackgroundWorker 组件
- BackgroundWorker组件
- 多线程---BackgroundWorker
- BackgroundWorker 类
- Android子线程中更新UI的3种方法
- View事件体系之View的的滑动
- intent详解(一)
- XiaomiRouter自学之路(01-项目背景)
- look look C#7
- BackgroundWorker 小结
- [LeetCode]385. Mini Parser
- 知识点图谱
- 记一次在OpenStack上进行Trouble Shooting的过程(找出无法显示instance的原因)
- 网页中右键功能的实现--- contextMenu的使用
- 汇编初探(2)-cpu寄存器
- python pakage
- 四个月的蜕变之JQuery的几种常用代码
- 如何查看struts2源码