开始 在应用程序中添加一个BackgroundWorker实例,如果用的是VS,可以从工具上直接拖到应用程序: BackgroundWorker backgroundWorker1 = new BackgroundWorker...(); 为了开始在后台操作,必须调用BackgroundWorker的RunWorkerAsync()方法,当调用此方时,BackgroundWorker 通过触发DoWork 事件,开始执行后台操作...代码如下: 代码一: BackgroundWorker backgroundWorker1 = new BackgroundWorker(); //在另一个线程里开始操作(btnStart是一个按钮控件...代码二: BackgroundWorker backgroundWorker1 = new BackgroundWorker(); backgroundWorker1.WorkerReportsProgress...代码三: BackgroundWorker backgroundWorker1 = new BackgroundWorker(); backgroundWorker1.WorkerReportsProgress
通过一个demo来说一下backgroundworker的使用 上图使我们最终需要实现的效果,下来我们开始编码 声明backgroundworker并绑定事件 在注释中已经写出属性的含义和绑定事件的含义...BackgroundWorker backgroundWorker1; backgroundWorker1 = new System.ComponentModel.BackgroundWorker();...backgroundWorker1.WorkerReportsProgress = true;//能否报告进度更新 backgroundWorker1.WorkerSupportsCancellation...(this.backgroundWorker1_RunWorkerCompleted); DoWork 后台要执行的任务 private void backgroundWorker1_DoWork(object....CancelAsync(); } backgroundWorker1.RunWorkerAsync(50); 开始执行任务,参数50可以在backgroundWorker1_DoWork
还好 .NET 类库中提供了一个叫做 BackgroundWorker 的类可以比较优雅的解决这类问题。...虽然BackgroundWorker 类使用起来比较简单,但其中还是有一些需要注意的细节,下面我们就通过 demo 程序介绍它的主要用法。...private BackgroundWorker _demoBGWorker = new BackgroundWorker(); _demoBGWorker.DoWork += BGWorker_DoWork...当然,BackgroundWorker对这个用例也提供了很好的支持。...bgWorker = sender as BackgroundWorker; int endNumber = 0; if(e.Argument !
---------------201504170911更新--------------- 更新内容:删除bgwUI新增的Start方法,改为通过new修饰符+可选参数的方式同时覆盖基类(BackgroundWorker...而这一篇分享的是一个叫做BackgroundWorkerUI的东东(下文简称bgwUI),看名字就知道它是基于BackgroundWorker(下文可能简称bgw)组件实现的,所以如果你更习惯bgw的使用方式...+ e.Result); } } 与BackgroundWorker的用法区别: 这里只讲区别,没讲到的表示与bgw一致,不熟悉bgw用法的猿友请MSDN。...System.ComponentModel; using System.Windows.Forms; namespace AhDung.WinForm { /// /// 带等待窗体的BackgroundWorker...报告进度用一组UI操作方法 /// public class BackgroundWorkerUI : BackgroundWorker {
直接使用多线程有时候会带来莫名其妙的错误,不定时的发生,有时候会让程序直接崩溃,其实BackgroundWorker 类允许您在单独的专用线程上运行操作。...可以通过编程方式创建 BackgroundWorker,也可以将它从“工具箱”的“组件”选项卡中拖到窗体上。...BackgroundWorker 事件不跨 AppDomain 边界进行封送处理。请不要使用 BackgroundWorker 组件在多个 AppDomain 中执行多线程操作。...下面使用BackgroundWorker 完成斐波那契数列的后台运算操作,斐波那契数列:1,1,2,3,5,8...n=(n-1)+(n-2) BackgroundWorker bw; ...如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用 BackgroundWorker 类方便地解决问题。 注:文章参考了MSDN许多
三个事件 DoWork 事件 void backgroundWorker1_DoWork( Object sender, DoWorkEventArgs e ) 其中句柄sender指向的就是该BackgroundWorker...backgroundWorker; private void button1_Click(object sender, EventArgs e) { backgroundWorker = new BackgroundWorker...(); backgroundWorker.WorkerReportsProgress = true; backgroundWorker.DoWork += new DoWorkEventHandler(...backgroundWorker_DoWork); backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker_ProgressChanged...); backgroundWorker.RunWorkerAsync(); } void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs
在Windows Form应用中,BackgroundWorker 类允许您在单独的专用线程上运行操作。...如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用 BackgroundWorker 类方便地解决问题。...方法backgroundWorker_RunWorkerCompleted是BackgroundWorker的RunWorkerCompleted事件处理方法,在这里我们通过MessageBox来显示当前窗体的...注册到该BackgroundWorker的异步操作通过点击某个按钮开启。相关的代码如下所示。...-= backgroundWorker_RunWorkerCompleted; 9: }
Public Class Form_backgroundworker Dim ShowFlag As Boolean = True Dim actCell As Excel.Range...CenterToScreen() BackgroundWorker1.WorkerReportsProgress = True BackgroundWorker1.WorkerSupportsCancellation...Me.Closed If BackgroundWorker1.IsBusy Then ShowFlag = False BackgroundWorker1...e As ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork Dim worker As BackgroundWorker...= CType(sender, BackgroundWorker) For j As Integer = 1 To 100 If BackgroundWorker1
二、代码实现 由于界面上左右两边是两个互不干扰、相互独立的操作,所以分别创建了两个BackgroundWorker组件来负责(如下图:backgroundWorkerLeft和backgroundWorkerRight...将两个BackgroundWorker的WorkerReportsProgress和WorkerSupportsCancellation设为true。...注意该方法的两个参数:BackgroundWorker和DoWorkEventArgs 对象,返回值是返回数据的数量。...之所以要将这两个参数传入RetrieveData()方法,是因为该方法是为两个BackgroundWorker服务的,需要通过参数来区别当前是哪个BackgroundWorker。...我们再来看看RetrieveData方法的定义: 1: private int RetrieveData(BackgroundWorker worker, DoWorkEventArgs e)
一、BackgroundWorker控件详解 BackgroundWorker控件是Windows Forms中提供的一个轻量级组件,用于在后台线程中执行耗时的操作,避免阻塞UI线程,提高应用程序的响应性能...下面是一个简单的示例,演示如何在Winform中使用BackgroundWorker控件和WorkerSupportsCancellation属性: private BackgroundWorker backgroundWorker1...2.常用场景 BackgroundWorker控件在Winform应用程序中的常用场景有: 长时间运行的任务:当需要执行耗时的操作时,比如读取大量数据、计算复杂算法、网络请求等,BackgroundWorker.../ 创建 BackgroundWorker 对象 bgWorker = new BackgroundWorker(); // 设置 WorkerReportsProgress...; // 创建 BackgroundWorker 对象 bgWorker = new BackgroundWorker();
backgroundWorker1.IsBusy) //判断是否正在执行异步操作 { //backgroundWorker开始执行异步操作...在EAP模型中,执行RunWorkerAsync方法后,会触发backgroundWorker1_DoWork事件。...那么BackgroundWorker内部是不是依然使用了线程池及后台线程呢?...backgroundWorker1_RunWorkerCompleted判断是否已经取消,最后对UI进行提示输出,取消操作完成。...尤其是BackgroundWorker组件,定义相应的事件后,在不同阶段根据需求编写方法即可实现异步操作、报告进度及取消等。
微软除实现了线程池外,还需要关注一个类型:BackgroundWorker。...BackgroundWorker 的简单示例如下: private BackgroundWorker backgroundWorker = new BackgroundWorker(); private...+= BackgroundWorker_DoWork; //注册报告进度 backgroundWorker.ProgressChanged += BackgroundWorker_ProgressChanged...; //注册完成时的回调 backgroundWorker.RunWorkerCompleted += BackgroundWorker_RunWorkerCompleted;...e) { //取消任务 if (backgroundWorker.IsBusy) backgroundWorker.CancelAsync(); } private void
C#,VS中有一个控件叫做BackgroundWorker,他的意思是在单独的线程上执行操作。 ?...用法: private BackgroundWorker bgWorker = new BackgroundWorker(); bgWorker.WorkerReportsProgress = true...调用该方法后,将触发BackgroundWorker. ProgressChanged事件。...当调用BackgroundWorker.RunWorkerAsync()时触发。..."; if (backgroundWorker1.IsBusy !
writer; public lockClass() { writer = new StreamWriter(f); var backgroundWorker...= new BackgroundWorker(); backgroundWorker.DoWork += backgroundWorker_DoWork;...backgroundWorker.RunWorkerAsync(); } void backgroundWorker_DoWork(object sender, DoWorkEventArgs...= new BackgroundWorker(); backgroundWorker.DoWork += reader_backgroundWorker_DoWork;...backgroundWorker.RunWorkerAsync(); } void reader_backgroundWorker_DoWork(object sender
先来一个加载窗体代码 1 public partial class FrmLoading : Form 2 { 3 public BackgroundWorker updateDBWorker...=new BackgroundWorker(); 4 5 public Action BackgroundWorkAction 6 { 7...DoWork); 25 this.updateDBWorker.ProgressChanged += new ProgressChangedEventHandler(this.backgroundWorker1...); 26 this.updateDBWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.backgroundWorker1..."" : e.UserState.ToString(), e.ProgressPercentage); 72 } 73 74 private void backgroundWorker1
抱歉各位多线程专栏托更这么久,这篇文章我们继续讲线程池的相关知识,其中将涉及到如下知识: 取消异步操作 等待事件处理器及超时 计时器 BackgroundWorker 零、取消异步操作 这一小节将引入两个类...三、BackgroundWorker 在这一小节我们将不使用线程池和委托而是使用了事件。事件表示了一些通知的源或当通知到达时会有所响应的一系列订阅者。下面我们先来看一下例子。...bw = (BackgroundWorker)sender; for (int i = 1; i <= 100; i++) {...BackgroundWorker 主要用于 WPF 中,通过后台工作事件处理器代码可以直接与 UI 控制器交互。...与直接在线程池中与 UI 控制器交互的方式相比较,使用 BackgroundWorker 更好。
/// 36 /// The update database worker 37 /// 38 BackgroundWorker...updateDBWorker = new BackgroundWorker(); 39 /// 40 /// 获取或设置加载任务 41...DoWork); 68 this.updateDBWorker.ProgressChanged += new ProgressChangedEventHandler(this.backgroundWorker1... 114 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 115... 139 private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs
其实从第三层到第五层原本是放在一个字段里的string型POI类型描述,将它拆解成三层树结构时损耗了部分性能,到最下面一层(图标是感叹号)类型,大概有5700多个叶子节点,加载这个资源目录树需要一段时间,这里用委托实现页面传值+BackgroundWorker...弹框代码示例 // 文本框赋值方法 的委托属性 private LoadDataEventHandler _loadDataSubWindowDel; BackgroundWorker worker =...typeString, string adname, LoadDataEventHandler del) { InitializeComponent(); worker = new BackgroundWorker..._loadDataSubWindowDel = del; } #region BackgroundWorker 多线程 /// /// 第一次打开Form /// </summary...#region load数据 /// /// 组装树的数据集 /// private FormMainProgressBarResult LoadData(BackgroundWorker
采用BackgroundWorker,在后台执行程序,往往比开新线程更简单和更加安全。...简单的使用方法 System.ComponentModel.BackgroundWorker bw = new System.ComponentModel.BackgroundWorker(); //定义需要在子线程中干的事情...网页地址 /// public static void Notify(string url) { BackgroundWorker...bw = new BackgroundWorker(); //定义一个背景对象 //定义需要在子线程中干的事情 bw.DoWork += new System.ComponentModel.DoWorkEventHandler
.Net2.0的System.ComponentModel.BackgroundWorker为我们提供了一个很方便的解决方法....BackgroundWorker内部实现是基于delegate的异步调用. backgroundWorkerDemo.zip
领取专属 10元无门槛券
手把手带您无忧上云