BackgroundWorker控件使用

Posted Avanti

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BackgroundWorker控件使用相关的知识,希望对你有一定的参考价值。

BackgroundWorker控件简介

  使用BackgroundWorker控件可以在后台单独的线程上执行操作,通常用于数据库操作、文件下载等相对耗时一般要求后台处理的任务。使用起来比较简单,如果需要后台处理的任务少的话,①在VS中可以直接从工具箱中拖一个BackgroundWorker到主界面中即可,自动命名backgroundWorker1。②或者手动声明初始化BackgroundWorker类新实例:BackgroundWorker bgw=new BackgroundWorker();

  所属命名空间:System.ComponentModel

1、常用属性:

  ①CancellationPending:获取一个值,指示应用程序是否已经请求取消后台操作。如果应用程序已经请求取消后台操作,则为true;否则为false,默认为false。如果CancellationPending为true,则已对BackgroundWorker调用了CancelAsync方法。

  ②IsBusy:获取一个值,指示BackgroundWorker是否正在运行异步操作。如果BackgroundWorker正在运行异步操作,则为true;否则为false。调用RunWorkerAsync时,BackgroundWorker将启动异步操作。

  ③WorkerReportsProgress:获取或设置一个值,该值指示BackgroundWorker能否报告进度更新。若支持进度更新,则为true;否则为false,默认为false。当该属性为true时,用户代码可以调用ReportProgress方法来引发ProgressChanged事件。可在BackgroundWorker属性中设置,也可在代码中编写bgw.WorkerReportsProgress = true;

  ④WorkerSupportsCancellation:获取或设置一个值,该值指示BackgroundWorker是否支持异步取消。若支持取消,则为true,;否则为false,默认为false。当该属性为true时,可以调用CancelAsync方法中断后台操作。可在BackgroundWorker属性中设置,也可在代码中编写bgw.WorkerSupportsCancellation = true;

2、常用方法:

  ①CancelAsync():请求取消挂起的后台操作。CancelAsync 提交终止挂起的后台操作的请求,并将CancellationPending属性设置为true。

  ②Dispose():释放由Component使用的所有资源。

  ③OnDoWork(DoWorkEventArgs):引发DoWork事件。

  ④OnProgressChanged(ProgressChangedEventArgs):引发ProgressChanged事件。

  ⑤OnRunWorkerCompleted(RunWorkerCompletedEventArgs):引发RunWorkerCompleted事件。

  ⑥ReportProgress(Int32)、ReportProgress(Int32,Object):引发ProgressChanged事件。e.g:bgw.ReportProgress(percentProgress); 参数percentProgress表示已完成的后台操作所占的百分比,范围从0%到100%。

  ⑦RunWorkerAsync()、RunWorkerAsync(Object):开始执行后台操作。e.g:bgw.RunWorkerAsync(argument);参数argument表示要在DoWork事件处理程序中执行的后台操作使用的参数。

  注意,所传入的参数最多为一个,若想传入多个参数,则将参数封装到一个类中,通过类的实例来传递;或者若传入的参数为同一类型,则可以将参数写进一个数组,通过传入数组来传递。

3、事件:

  ①Disposed:当通过调用Dispose方法释放组件时发生。

  ②DoWork:调用RunWorkerAsync时发生。在此事件中处理程序中调用耗时的操作。

  ③ProgressChanged:调用ReportProgress时发生。在此事件中处理收到进度更新的通知。

  ④RunWorkerCompleted:当后台操作已完成、被取消或引发异常时发生。在此事件中处理操作完成时收到的通知。

参考自MSDN,其他相关详细见MSDN:https://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker(v=vs.110).aspx

以上是关于BackgroundWorker控件使用的主要内容,如果未能解决你的问题,请参考以下文章

C#timer backgroundworker用户控件

backgroundworker控件

两个同时运行的线程控件(BackgroundWorker)串数据

C#中的BackgroundWorker控件

使用BackgroundWorker

C#中用Backgroundworker调用UI的textbox控件,对其赋值,有时会抛出异常。