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

时间: 2024-12-14 08:04:59

BackgroundWorker控件使用(一)的相关文章

C#中的BackgroundWorker控件

C#中的BackgroundWorker控件 Keywords: C# .NET BackgroundWorkerSource: http://txw1958.cnblogs.com/ BackgroundWorker是.NET Framework 里用来执行多线程任务的控件,它允许开发人员在一个单独的线程上执行一些操作.耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 始终处于停止响应状态.如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用

backgroundworker控件

该控件是一个支持界面异步操作的方法,包含DoWork.ProgressChanged.RunWorkerCompleted等几个主要事件,在后台运行代码时可保持前台界面进度的更新显示 详细介绍及示例: https://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker(v=vs.110).aspx

BackGroundWorker控件的使用注意

该控件有三个事件: DoWork .ProgressChanged 和 RunWorkerCompleted 在程序中调用RunWorkerAsync方法则会启动DoWork事件的事件处理,当在事件处理过程中,调用 ReportProgress方法则会启动ProgressChanged事件的事件处理,而当DoWork事件处理完成时,则会触发RunWorkerCompleted事件. 您必须非常小心,确保在 DoWork 事件处理程序中不操作任何用户界面对象.而应该通过 ProgressChang

线程间操作无效:从不是创建控件的线程访问它的三种方法

访问 Windows 窗体控件本质上不是线程安全的.如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态.还可能出现其他与线程相关的 bug,包括争用情况和死锁.确保以线程安全方式访问控件非常重要. 解决办法 1.把CheckForIllegalCrossThreadCalls设置为false 在多线程程序中,新创建的线程不能访问UI线程创建的窗口控件,如果需要访问窗口中的控件,可以在窗口构造函数中将CheckForIllegalCrossThreadCalls设置为

BackgroundWorder控件

BackgroundWorder控件: BackgroundWorker控件顾名思义,是执行后台工作的控件,准确来说,是在非主线程上执行操作的控件.该类型定义在System.ComponentModel命名空间,该控件的使用非常简单,只要在工具库中把该控件拖动到界面就可以了. 比较重要的属性: CancellationPending:只读属性,表示应用程序是否已经取消后台操作 IsBuys:只读属性,表示控件是否正在进行异步操作. WorkerReportsProgress:表示该控件能否报告进

线程间操作无效: 从不是创建控件的线程访问它的三种方法

原文:http://www.cnblogs.com/luckboy/archive/2010/12/19/1910785.html 1.把CheckForIllegalCrossThreadCalls设置为false 2.利用委托 delegate void SetTextCallBack(string text); private void SetText(string text) { if (this.txt_a.InvokeRequired) { SetTextCallBack stcb

C#跨线程操作控件的最简单实现探究

随着程序复杂度的提高,程序不可避免会出现多个线程,此时就很可能存在跨线程操作控件的问题. 跨线程操作UI控件主要有三类方式: 1.禁止系统的线程间操作检查.(此法不建议使用) 2.使用Invoke(同步)或者BeginInvoke(异步).(使用委托实现,并用lambda表达式简化代码) 3.使用BackgroundWorker组件.(此法暂不介绍,详情可见文末的参考资料) 先看一个跨线程操作失败的例子: 新建一个Winform窗口程序项目,拖一个button1和label1控件到Form1窗体

WinFrom ProgressBar控件的使用

在WinForm程序中,大多数情况下我们是知道程序运行所需要的时间或步骤的,比如批量复制文件时文件的数量,数据导出或导入时数据的总行数等等.对于步骤比较确定的操作,如果程序执行过程时间较长,很容易使用BackgroundWorker结合ProgressBar来显示一个实时的进度.相关内容大家可以看我博客中的其它文章,有关如何使用BackgroundWorker和ProgressBar.但是,有的时候我们是不确定程序执行的具体步骤或时长的,比如连接一个远程服务或数据库服务,或者调用一个远程过程或W

ASP.NET 控件前缀命名规范

标准控件 1  btn Button 2  chk CheckBox 3  ckl CheckedListBox 4  cmb ComboBox 5  dtp DateTimePicker 6  lbl Label 7  llb LinkLabel 8  lst ListBox 9  lvw ListView 10  mtx MaskedTextBox 11  cdr MonthCalendar 12  icn NotifyIcon 13  nud NumeircUpDown 14  pic P