backgroundworkerC# form发起backgroundworker 当form close时 backgroundworker 还会继续工作吗

backgroundworker  时间:2021-06-19  阅读:()

BackgroundWorker怎么传递参数

争议组件介绍 BackgroundWorker类位于System.ComponentModel 命名空间通该类单独线程执行操作实现基于事件异步模式面BackgroundWorker类主要员进行介绍 BackgroundWorker类第1主要RunWorkerAsync该提交异步式启运行操作请求发请求引发 DoWork 事件事件处理程序始执行异步操作代码RunWorkerAsync 签名 publicvoidRunWorkerAsync(); publicvoidRunWorkerAsync(Object argument); 异步操作需要操作参数其作argument参数提供由于参数类型Object访问能需要进行类型转换 CancelAsync 提交终止异步操作请求并 CancellationPending 属性设置 true需要注意CancelAsync 否调用功同WorkerSupportsCancellation 属性相关允许取消执行异步操作需WorkerSupportsCancellation 属性设置true否则调用该抛异CancelAsync含参数签名 publicvoid CancelAsync(); 调用 CancelAsync BackgroundWorker CancellationPending 属性值设置true,编写单独线程执行辅助代码应定期检查 CancellationPending 属性查看否已该属性设置 truetrue应该结束辅助执行点需要注意DoWork 事件处理程序代码能发取消请求已经完处理工作DoWork事件处理程序或辅助能错设置 CancellationPending属性true机种情况即使调用 CancelAsync发取消异步操作请求RunWorkerCompleted 事件处理程序RunWorkerCompletedEventArgs 参数 Cancelled 标志设置 true线程编程经现竞争条件问题编写代码候需要考虑 执行异步操作需要跟踪异步操作执行进度BackgroundWorker类提供 ReportProgress 调用该引发 ProgressChanged 事件通注册该事件事件处理程序获取异步执行进度信息签名: publicvoidReportProgress(int percentProgress); publicvoidReportProgress(int percentProgress,Object userState); 该包含两版本percentProgress表示进度百比取值0-100userState选参数表示自定义用户状态 同CancelAsync BackgroundWorkerWorkerReportsProgress 属性设置 trueReportProgress 才调用功否则引发InvalidOperationException异 面已经提 BackgroundWorker3属性CancellationPending用提示操作否已经取 消WorkerReportsProgressWorkerSupportsCancellation别用设置否允许进度汇报进行取消操作 publicboolCancellationPending { get; } publicboolWorkerReportsProgress { get; set; } publicboolWorkerSupportsCancellation { get; set; } 另外用属性IsBusy publicbool IsBusy { get; } 通该属性查询BackgroundWorker实例否运行异步操作 BackgroundWorker 运行异步操作则true否则false BackgroundWorker类包含3事件事件处理程序进行异步操作辅助代码编写同用户界面信息交互 publiceventDoWorkEventHandler DoWork; publiceventProgressChangedEventHandler ProgressChanged; publiceventRunWorkerCompletedEventHandler RunWorkerCompleted; DoWork事 件处理程序用调用辅助进行实际处理操作由于该事件处理程序同于UI线程执行需要确保 DoWork 事件处理程序操作任何用户界面象辅助需要参数支持通RunWorkerAsync传入 DoWork 事件处理程序通 DoWorkEventArgs.Argument 属性提取该参数异步操作期间通 ProgressChanged事件处理程序获取异步操作进度信息通RunWorkerCompleted 事件处理程序获取异步操作结信息ProgressChangedRunWorkerCompleted事件处理程序安全同用户界面进行 通信 应用示例 面通简单示例演示BackgroundWorker组件典型应用本示例实现数值求操作该操作本身运行快模拟处理程知间段辅助调用Thread.Sleep 示例程序通Windows Forms展示显示1-100数值进行求操作界面 图1:应用程序界面 面主要实现代码进行说明先看BackgroundWorker类初始化初始化程注册3事件允许异步辅助调用及异步操作进度通知操作取消 private System.ComponentModel.BackgroundWorker backgroundWorker1; private void InitializeBackgoundWorker() { this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker(); this.backgroundWorker1.WorkerReportsProgress = true; this.backgroundWorker1.WorkerSupportsCancellation = true; this.backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork); this.backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged); this.backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted); } 通StartAsync按钮事件处理程序始异步处理操作请求事件处理程序 private void startAsyncButton_Click(object sender, EventArgs e) { resultLabel.Text = String.Empty; this.numericUpDown1.Enabled = false; this.startAsyncButton.Enabled = false; this.cancelAsyncButton.Enabled = true; //获取计算数值. int numberToCompute = (int)numericUpDown1.Value; //启异步操作. backgroundWorker1.RunWorkerAsync(numberToCompute); } startAsyncButton_Click处理程序首先些界面控件进行状态设置调用BackgroundWorker实例RunWorkerAsync始执行异步操作触发DoWork事件 void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; e.Result = ComputeAdd((int)e.Argument, worker, e); } DoWork事件处理程序通DoWorkEventArgs.Argument属 性获取传入参数传递给ComputeAdd辅助并处理结保存DoWorkEventArgs.Result属性 RunWorkerCompleted 事件处理程序RunWorkerCompletedEventArgs.Result 属性获取处理结DoWork事件处理程序现异则 BackgroundWorker 捕获该异并其传递 RunWorkerCompleted 事件处理程序该事件处理程序异信息作 RunWorkerCompletedEventArgs Error 属性公 private long ComputeAdd(int n, BackgroundWorker worker, DoWorkEventArgs e) { long result = 0; for (int i = 1; i <= n; i++) { if (worker.CancellationPending) { e.Cancel = true; break; } else { result += i; Thread.Sleep(500); int percentComplete = (int)((float)i / (float)n * 100); worker.ReportProgress(percentComplete); } } return result; } 辅助代码定期访问BackgroundWorker实 例CancellationPending属性调用BackgroundWorkerCancelAsync CancellationPending属性值设置true辅助结束执行另外辅助实现进度汇报功能通调用 worker.ReportProgress触发ProgressChanged事件接着通ProgressChanged事件处理程序更新进 度显示 void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { this.progressBar1.Value = e.ProgressPercentage; } RunWorkerCompleted事件处理程序异步处理结信息析异步操作执行结束处理取消或者执行现错误异 终止于处理结信息访问标准顺序先判断异步处理否异结束接着判断否执行取消操作访问处理结 void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (e.Error != null) { MessageBox.Show(e.Error.Message); } else if (e.Cancelled) { resultLabel.Text = "Canceled"; } else { resultLabel.Text = e.Result.ToString(); } this.numericUpDown1.Enabled = true; startAsyncButton.Enabled = true; cancelAsyncButton.Enabled = false; }

c# 窗体backgroundworker

1)【问题原因】 flag_read=1; data.RunWorkerAsync(); //问题原因:在这个while处死循环了! while?(flag_read==1)?;?//<--死循环2)【解决办法】 如果你采用BackgroundWorker来执行后台操作,可以用BackgroundWorker提供的结束操作事件来处理后台操作结束时的操作 //当backgroundWorker做完后发生的事件 backgroundWorker.RunWorkerCompleted?+=? ????new?RunWorkerCompletedEventHandler(this.bkWorkerCompleted);????? ?private?void?bkWorkerCompleted(object?sender,?DoWorkEventArgs?e) ?{ ?????//在此写处理后台操作完成的代码 ?}

c#窗体 如何在backgroundworker的DoWork中结束这个后台?

你好,BackgroundWorker的DoWork事件的委托签名如下:   private void DoWork(object?sender, DoWorkeventArgs e)   其中参数e包含了大量信息,同时能够接收使用e.Cancel=true令worker取消任务。

  需要在DoWork中取消,应使用e.Cancel=true;return;   需要在外部取消,应: 1. 在初始化时令backgroundWorker1.WorkerReportsProgress =?true; 2. 在外部控制的地方(如按钮事件)backgroundWorker1.CancelAsync(); 3. CancelAsync会更改worker的CancellationPending标志,所以在DoWork中应有类似下面的片段判断并退出。

?if(backgroundWorker1.CancellationPending) { e.Cancel=true; return;}   最后,在DoWork退出后,如需在外部得知是何种原因导致结束(取消或完成),请在worker的RunWorkerCompleted事件中检查参数e.Cancel属性。

c# backgroundworker+while(true)+界面修改

单独打开4个线程,就是4个Backgroundworker,然后一一进行处理。

worker1: worker2: ..... 8个变量完全足够表示8个目录中的文件变化了啊。

如a -&gt; b ,由worker1处理,执行成功,a-1,b+1

如何使用BackgroundWorker组件执行异步操作?

//在另一个线程上运行事件处理和序 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { e.Result = i((int)e.Argument, this.backgroundWorker1, e); } private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { this.progressBar1.Value = e.ProgressPercentage; } private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (e.Error != null)//是否有错误信息 { MessageBox.Show(//弹出消息对话框 e.Error.Message); } else if (e.Cancelled)//异步操作是否被取消 { resultLabel.Text = "Canceled";//返回字符串对象 } else { resultLabel.Text = e.Result.ToString();//显示结果 } numericUpDown1.Enabled = true;//启用numericUpDown控件 startAsyncButton.Enabled = true;//启用开始按钮 cancelAsyncButton.Enabled = false;//停用取消按钮 } private void startAsyncButton_Click(object sender, EventArgs e) { resultLabel.Text = String.Empty;//得到空字符串对象 this.numericUpDown1.Enabled = false;//停用numericUpDown控件 this.startAsyncButton.Enabled = false;//停用开始按钮 this.cancelAsyncButton.Enabled = true;//启用取消按钮 numberToCompute = (int)numericUpDown1.Value;//得到numericUpDown控件的值 highestPercentageReached = 0;//设置值为0 backgroundWorker1.RunWorkerAsync(numberToCompute);//开始执行后台操作 } long i(int n, BackgroundWorker worker, DoWorkEventArgs e) { if ((n < 0) || (n > 91)) { throw new ArgumentException(//抛出异常 "value must be >= 0 and <= 91", "n"); } long result = 0;//声明长整型变量并赋值 if (worker.CancellationPending)//判断是否已经取消后台操作 { e.Cancel = true;//设置取消事件 } else { if (n < 2) { result = 1;//方法返回1 } else { result = i(n - 1, worker, e) +//使用递归得到结果 i(n - 2, worker, e); } int percentComplete = (int)((float)n / (float)numberToCompute * 100); if (percentComplete > highestPercentageReached) { highestPercentageReached = percentComplete; worker.ReportProgress(percentComplete); } } return result;//返回结果 } private void cancelAsyncButton_Click(object sender, EventArgs e) { this.backgroundWorker1.CancelAsync();//取消挂起的后台操作 cancelAsyncButton.Enabled = false;//停用取消按钮 }//来源CodeGo.ent

C# form发起backgroundworker 当form close时 backgroundworker 还会继续工作吗

这分两种情况,如果是主窗体退出的话backgroundworker也会退出,如果backgroundworker是在子窗体中的话,关闭子窗体,backgroundworker还会继续工作。

百纵科技(1399元/月)香港CN2站群232IP

湖南百纵科技有限公司是一家具有ISP ICP 电信增值许可证的正规公司,多年不断转型探索现已颇具规模,公司成立于2009年 通过多年经营积累目前已独具一格,公司主要经营有国内高防服务器,香港服务器,美国服务器,站群服务器,东南亚服务器租用,国内香港美国云服务器,以及全球专线业务!活动方案:主营:1、美国CN2云服务器,美国VPS,美国高防云主机,美国独立服务器,美国站群服务器,美国母机。2、香港C...

VPSMS:53元/月KVM-512MB/15G SSD/1TB/洛杉矶CN2 GIA

VPSMS最近在做两周年活动,加上双十一也不久了,商家针对美国洛杉矶CN2 GIA线路VPS主机提供月付6.8折,季付6.2折优惠码,同时活动期间充值800元送150元。这是一家由港人和国人合资开办的VPS主机商,提供基于KVM架构的VPS主机,美国洛杉矶安畅的机器,线路方面电信联通CN2 GIA,移动直连,国内访问速度不错。下面分享几款VPS主机配置信息。CPU:1core内存:512MB硬盘:...

Tudcloud(月付7.2美元),香港VPS,可选大带宽或不限流量

Tudcloud是一家新开的主机商,提供VPS和独立服务器租用,数据中心在中国香港(VPS和独立服务器)和美国洛杉矶(独立服务器),商家VPS基于KVM架构,开设在香港机房,可以选择限制流量大带宽或者限制带宽不限流量套餐。目前提供8折优惠码,优惠后最低每月7.2美元起。虽然主机商网站为英文界面,但是支付方式仅支付宝和Stripe,可能是国人商家。下面列出部分VPS主机套餐配置信息。CPU:1cor...

backgroundworker为你推荐
createfile失败CreateFile失败,代码5拒绝访问(高分在线求助!!!)短信营销方案中秋节,国庆节短信营销方案renderpartialrenderHtml和render有什么区别云输入法QQ云输入法的候选窗口是什么样的?java程序员招聘女java程序员好找工作嘛backupexecBackup Exec 2014怎么备份Exchange在线操作系统TOMOS在线操作系统是什么?asp论坛源码ASP论坛源代码为什么上传到ASP空间后打不开cpu仪表盘cpu型号标示数字是什么意思cpu仪表盘windows7系统怎么样吧CPU的温度显示调处来
免费vps服务器 如何查询域名备案号 泛域名解析 大硬盘 t楼 mach 标准机柜尺寸 本网站在美国维护 圣诞促销 howfile hostker linux服务器维护 美国凤凰城 沈阳主机托管 smtp服务器地址 国外的代理服务器 百度云空间 中国域名 镇江高防 网页加速 更多