欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#使用BackgroundWorker控件

程序员文章站 2024-03-27 09:31:46
在我们的程序中,经常会有一些耗时较长的运算,为了保证用户体验,不引起界面不响应,我们一般会采用多线程操作,让耗时操作在后台完成,完成后再进行处理或给出提示,在运行中,也会时时去刷新界面上的进度条等显示...

在我们的程序中,经常会有一些耗时较长的运算,为了保证用户体验,不引起界面不响应,我们一般会采用多线程操作,让耗时操作在后台完成,完成后再进行处理或给出提示,在运行中,也会时时去刷新界面上的进度条等显示,必要时还要控制后台线程中断当前操作。

在.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控件

操作完成界面:

C#使用BackgroundWorker控件

接收返回值:

C#使用BackgroundWorker控件

取消后台操作:

C#使用BackgroundWorker控件

 到此这篇关于c#使用backgroundworker控件的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。