C#使用BackgroundWorker控件

2022-07-17,

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

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

下载本文的Word格式文档,以方便收藏与打印。