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还会继续工作。

麻花云-香港CN2云服务器,安徽BGP线路,安徽移动大带宽!全系6折!

一、麻花云官网点击直达麻花云官方网站二、活动方案优惠码:专属优惠码:F1B07B 享受85折优惠。点击访问活动链接最新活动 :五一狂欢 惠战到底 香港云主机 1.9折起香港特价体验云主机CN2 云服务器最新上线KVM架构,,默认40G SSD,+10G自带一个IPv4,免费10Gbps防御,CPU内存带宽价格购买1核1G1M19元首月链接2核2G 2M92元/3个月链接2核4G3M112元/3个月...

无忧云( 9.9元/首月),河南洛阳BGP 2核 2G,大连BGP线路 20G高防 ,

无忧云怎么样?无忧云服务器好不好?无忧云值不值得购买?无忧云,无忧云是一家成立于2017年的老牌商家旗下的服务器销售品牌,现由深圳市云上无忧网络科技有限公司运营,是正规持证IDC/ISP/IRCS商家,自营有国内雅安高防、洛阳BGP企业线路、香港CN2线路、国外服务器产品等,非常适合需要稳定的线路的用户,如游戏、企业建站业务需求和各种负载较高的项目,同时还有自营的高性能、高配置的BGP线路高防物理...

快云科技,美国VPS 2H5G独享20M 仅售19.8/月  年付仅需148

快云科技已稳步运行进两年了 期间没出现过线路不稳 客户不满意等一系列问题 本司资质齐全 持有IDC ICP ISP等正规手续 有独特的网站设计理念 在前几天刚是参加过魔方系统举行的设计大赛拿获最佳设计奖第一名 本公司主营产品 香港弹性云服务器,美国vps和日本vps,香港物理机,国内高防物理机以及美国日本高防物理机 2020年的国庆推出过一款香港的回馈用户特惠机 已作为传家宝 稳定运行 马上又到了...

backgroundworker为你推荐
snake模型图像分割与边缘处理有什么区别?请大侠回答,谢谢了。短信营销方案短信平台应该如何推广和运营啊?东兴证券网站东兴证券超强版下载彩信平台请问彩信平台升级怎么改参数能告诉我具体步骤吗?微盟价格做微盟平台的销售怎么样,有前景吗测试post软件测试的测试工作有哪些重要的步骤linux启动盘制作工具用什么做linux u盘启动盘455端口sangfor防火墙如何禁用455端口mpeg4格式什么是MPEG4视频格式6位qq号码申请怎么能申请上6位QQ号呢?
香港主机租用 网易域名邮箱 香港加速器 php探针 lighttpd typecho 建站代码 韩国网名大全 52测评网 193邮箱 圣诞促销 炎黄盛世 免费吧 广州服务器 metalink 银盘服务是什么 银盘服务 新睿云 跟踪路由命令 服务器是干什么用的 更多