C#使用BackgroundWorker控件
在我们的程序中,经常会有一些耗时较长的运算,为了保证用户体验,不引起界面不响应,我们一般会采用多线程操作,让耗时操作在后台完成,完成后再进行处理或给出提示,在运行中,也会时时去刷新界面上的进度条等显示,必要时还要控制后台线程中断当前操作。
在.net中,提供了一个组件backgroundworker就是专门解决这个问题的。backgroundworker类允许在单独的专用线程上运行操作。 耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面(ui)似乎处于停止响应状态。如果需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用backgroundworker类方便地解决问题。
程序执行步骤:
- 1、调用backgroundworker的runworkerasync()方法,如果后台操作需要参数,在调用runworkerasync()方法时给出参数,在dowork事件处理程序内部,可以从doworkeventargs.argument属性中提取该参数。
- 2、执行dowork事件,后台需要执行的代码放到dowork事件里面执行。当调用runworkerasync()方法时,backgroundworker通过触发dowork事件,开始执行后台操作
显示后台操作进度:
为了显示后台操作的执行进度,首先要使workerreportsprogress等于true,然后调用backgroundworker的reportprogress()方法,通过它传递操作完成的进度值,此外,该方法触发progresschanged事件,在此事件中,通过progresschangedeventargs的实例,接收到主线程传递过来的参数。
取消后台操作:
为了使 backgroundworker 可以取消后台正在执行的操作,首先要把属性workersupportscancellation 的值设置为 true。接着调用cancelasync()方法,该方法使得属性cancellationpending 为true,利用cancellationpending 属性,可以判断是否取消后台异步操作。
后台操作完成后,反馈给用户:
当后台操作完成以后,无论是completed 还是cancelled,runworkercompleted()事件都会被触发,通过此方法可以将后台操作的完成结果反馈给用户。runworkercompleted 事件处理函数会在dowork 事件处理函数返回后被调用。通过它我们可以进行一些运算结束后的操作,比如禁用取消按钮,异常处理,结果显示等。注意,如果想要拿到e.result,您需要在bgworker_dowork方法中设置 e.result属性另外,通过runworkercompletedeventargs实例的cancelled 属性,以判断是否是cancel操作使得后台操作终止;
从后台操作返回值
在执行dowork事件时doworkeventargs实例的result属性,返回值到用户;在runworkercompleted事件里,runworkercompletedeventargs 实例的result属性接收值;
创建backgroundworkerdemo例子:
- 1.新建一个windows窗体应用程序,如:backgroundworkerdemo
- 2.拖一个progressbar(进度条)和一个backgroundworker控件到form窗体上,界面如图:
后台代码:
运行界面:
操作完成界面:
接收返回值:
取消后台操作:
到此这篇关于c#使用backgroundworker控件的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
C#使用BackgroundWorker控件
-
【Android】性能优化——懒加载控件ViewStub简易使用与源码分析
-
C#数据类型转换—使用Convert类转换
-
Angular UI组件库入门指南 - 如何安装和开始使用(一) Angularkendo uitelerikUI控件
-
C# 方法定义与使用
-
C#/VB.NET 创建Word项目符号列表、多级项目编号列表 博客分类: .NET Word C#.NETWord项目符号/编号列表免费控件
-
Android TextView 垂直滚动 博客分类: Android开发 TextView控件使用 AndroidTextView垂直滚动
-
C# 在PPT幻灯片中绘制图形 博客分类: .NET PPT C#.NETSpire.PresentationPPT控件图形
-
我在使用 NPOI 时遇到的问题 - Color 博客分类: C# .Net开源软件 NPOI
-
我在使用 NPOI 时遇到的问题 - Sheet Tab Color 博客分类: C# .Net开源软件 NPOI