使用BackgroundWorker组件进行异步操作编程

使用BackgroundWorker组件进行异步操作编程

ID:39573865

大小:208.50 KB

页数:11页

时间:2019-07-06

使用BackgroundWorker组件进行异步操作编程_第1页
使用BackgroundWorker组件进行异步操作编程_第2页
使用BackgroundWorker组件进行异步操作编程_第3页
使用BackgroundWorker组件进行异步操作编程_第4页
使用BackgroundWorker组件进行异步操作编程_第5页
资源描述:

《使用BackgroundWorker组件进行异步操作编程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、使用BackgroundWorker组件进行异步操作编程摘要:本文介绍了BackgroundWorker组件的功能及在基于事件的异步操作编程中的应用,并对组件的实现原理进行简述。本页内容概述组件介绍应用示例实现原理结束语概述在应用程序中,可能会遇到一些执行耗时的功能操作,比如数据下载、复杂计算及数据库事务等,一般这样的功能会在单独的线程上实现,执行结束后结果显示到用户界面上,这样可避免造成用户界面长时间无响应情况。在.NET2.0及以后的版本中,FCL提供了BackgroundWorker组件来方

2、便的实现这些功能要求。组件介绍BackgroundWorker类位于System.ComponentModel命名空间中,通过该类在单独的线程上执行操作实现基于事件的异步模式。下面对BackgroundWorker类的主要成员进行介绍。BackgroundWorker类的第1个主要方法是RunWorkerAsync,该方法提交一个以异步方式启动运行操作的请求,发出请求后,将引发DoWork事件,在事件处理程序中开始执行异步操作代码。RunWorkerAsync方法签名如下,PublicvoidRu

3、nWorkerAsync();PublicvoidRunWorkerAsync(Objectargument);如果异步操作需要操作参数,可以将其作为argument参数提供,由于参数类型为Object,因此访问时可能需要进行类型转换。CancelAsync方法提交终止异步操作的请求,并将CancellationPending属性设置为true。需要注意的是,CancelAsync方法是否调用成功,同WorkerSupportsCancellation属性相关,如果允许取消执行的异步操作,需将Wo

4、rkerSupportsCancellation属性设置为true,否则调用该方法将抛出异常。CancelAsync方法不含参数,方法签名如下,PublicvoidCancelAsync();调用CancelAsync方法时,BackgroundWorker的CancellationPending属性值将被设置为true,因此在编写单独线程中执行的辅助方法时,代码中应定期检查CancellationPending属性,查看是否已将该属性设置为true,如果为true,应该结束辅助方法的执行。有一点

5、需要注意的是,DoWork事件处理程序中的代码有可能在发出取消请求时已经完成处理工作,因此,DoWork事件处理程序或辅助方法可能会错过设置CancellationPending属性为true的时机。在这种情况下,即使调用CancelAsync方法发出了取消异步操作请求,RunWorkerCompleted事件处理程序中RunWorkerCompletedEventArgs参数的Cancelled标志也不会被设置为true,这是在多线程编程中经常会出现的竞争条件问题,因此编写代码的时候需要考虑。在

6、执行异步操作时,如果需要跟踪异步操作执行进度,BackgroundWorker类提供了ReportProgress方法,调用该方法将引发ProgressChanged事件,通过注册该事件在事件处理程序中获取异步执行进度信息。方法签名如下:PublicvoidReportProgress(intpercentProgress);PublicvoidReportProgress(intpercentProgress,ObjectuserState);该方法包含两个版本,percentProgress表

7、示进度百分比,取值为0-100,userState为可选参数表示自定义用户状态。同CancelAsync方法一样,BackgroundWorker的WorkerReportsProgress属性设置为true时,ReportProgress方法才会调用成功,否则将引发InvalidOperationException异常。上面已经提到了BackgroundWorker的3个属性,CancellationPending用来提示操作是否已经取消,WorkerReportsProgress和Worker

8、SupportsCancellation分别用来设置是否允许进度汇报和进行取消操作。PublicboolCancellationPending{get;}PublicboolWorkerReportsProgress{get;set;}PublicboolWorkerSupportsCancellation{get;set;}另外一个会用到的属性是IsBusy,PublicboolIsBusy{get;}通过该属性查询BackgroundWorker实例是否正在运行异步操作,如果B

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。