c#中使用BackgroundWorker
在客户端中,为了防止界面假死状态,或者不能拖动界面,可以使用BackgroundWorker。
1.在界面上拖动一个BackgroundWorker,label,进度条和2个button控件。BackgroundWorker也可以选择在cs文件中new。
2.bgWorker_DoWork事件中接收到bgWorker.RunWorkerAsync("11111")
3.bgWorker_ProgessChanged事件中接收到bgWorker.ReportProgress方法传递过来的参数
4.bgWorker_WorkerCompleted事件中主要处理线程暂停或者终止时的提示
5.中途取消操作后,也就是执行bgWorker.CancelAsync()此方法。bgWorker.CancellationPending会变成true
所有代码:
public partial class Form1 : Form{public Form1(){InitializeComponent();}private void btnStart_Click(object sender, EventArgs e){if (bgWorker.IsBusy) //判断是否正在运行异步操作return;this.progressBar1.Maximum = 100; //设置进度条最大值this.btnStart.Enabled = false;this.btnStop.Enabled = true;bgWorker.RunWorkerAsync("11111"); //给业务传递参数,就是把前台的要处理的参数传递进去}public void bgWorker_DoWork(object sender, DoWorkEventArgs e){//业务处理object s = e.Argument; //这的e.Argument就是上面传递的参数 11111for (int i = 0; i <= this.progressBar1.Maximum; i++){if (bgWorker.CancellationPending) //此处关联的是btnStop_Click事件中的这个bgWorker.CancelAsync();如果这个触发了,那么就会停止。{e.Cancel = true;return;}else{bgWorker.ReportProgress(i, "222222"); //向bgWorker_ProgessChanged事件传递参数,第一个是进度的参数,第二个是你要处理业务的参数System.Threading.Thread.Sleep(1);}}}public void bgWorker_ProgessChanged(object sender, ProgressChangedEventArgs e){//页面处理string state = (string)e.UserState;//接收上bgWorker.ReportProgress方法传递过来的参数userStatethis.progressBar1.Value = e.ProgressPercentage;this.label1.Text = "处理进度:" + Convert.ToString(e.ProgressPercentage) + "%";//label2.Text = e.ProgressPercentage.ToString();}public void bgWorker_WorkerCompleted(object sender, RunWorkerCompletedEventArgs e){if (e.Error != null){MessageBox.Show(e.Error.ToString());return;}if (!e.Cancelled)this.label1.Text = "处理完毕!";elsethis.label1.Text = "处理终止!";}private void btnStop_Click(object sender, EventArgs e){this.btnStart.Enabled = true;this.btnStop.Enabled = false;bgWorker.CancelAsync();}}
多个线程的话,在A_DoWork开启另外一个bw,可以一直套用。
总结。
主要是3个事件:
bgWorker_DoWork:业务内部处理大量数据的地方,后台默默处理数据。(关于界面控件的东西,这里不要出现,比如给控件赋值,这里不要出现)
bgWorker_ProgessChanged:每次业务内部处理完成一部分时,就会告诉界面我处理了什么,主要是给前台显示信息。(这里可以与前台一起交互)
bgWorker_WorkerCompleted:终止或者完成后就会进入(这里可以是完成数据后,给控件赋值)
3个方法:
RunWorkerAsync:向业务内部传递处理数据的方法,传递集合,数值之类的
ReportProgress:把处理的进度告诉界面
CancelAsync:取消操作会执行此方法
c#中使用BackgroundWorker相关推荐
- C#中的BackgroundWorker控件
Keywords: C# .NET BackgroundWorker Source: http://txw1958.cnblogs.com/ BackgroundWorker是.NET Framewo ...
- Winform中设置BackgroundWorker在取消时关闭后台进程不生效-没有跳出循环
场景 Winform中设置BackgroundWorker在取消时关闭后台进程: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...
- Winform中设置BackgroundWorker在取消时关闭后台进程
场景 在Winform中拖拽 一个BackgroundWorker控件,配合进度条控件能开启一个后台线程并报告进度条进度. 但是在执行后台线程的任务时,如果想要取消,怎样让其停止执行. 注: 博客主页 ...
- 如果在BackgroundWorker运行过程中关闭窗体…
在Windows Form应用中,BackgroundWorker 类允许您在单独的专用线程上运行操作.耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态 ...
- C BackgroundWorker类详细说明
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Back ...
- BackgroundWorker学习笔记
1 简介 BackgroundWorker 类允许您在单独的专用线程上运行操作. 耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态. 如果您需要能进行响 ...
- 【C#】【Thread】BackgroundWorker的使用
BackgroundWorker 可以用于启动后台线程. 主要的事件及参数: 1.DoWork --当执行BackgroundWorker.RunWorkerAsync方法时会触发该事件,并且传递Do ...
- 关于net2.0里面新出现的一个异步处理类backgroundworker
这是一个在.net2.0里面新出现的类,用于执行后台比较长的任务而又想能和UI有点操作的应用里面. 在研究一个桌面应用程序的时候,看到了backgroundworker 这个类下面是从网上摘要的该类用 ...
- GNU Make 使用手册(于凤昌中译版)
GNU Make 使用手册(中译版) 翻译:于凤昌 GNU make Version 3.79 April 2000 Richard M. Stallman and Roland McGrath 1 ...
- JavaScript多线程之HTML5 Web Worker
在博主的前些文章Promise的前世今生和妙用技巧和JavaScript单线程和浏览器事件循环简述中都曾提到了HTML5 Web Worker这一个概念.在JavaScript单线程和浏览器事件循环简 ...
最新文章
- Top 10 Mistakes Java Developers Make(转)
- ERPLAB中文教程:高级EvenList选项
- selenium启动Firefox示例
- opengl 深度详解_OpenGL中的深度测试
- 797. 所有可能的路径
- 人工智能python课程总结1500字_李开复的《人工智能》读后感1500字
- 代码风格研究:左花括号 是否换行???
- web安全day20:今天讲清楚漏洞和木马的区别,最后一个实验演示通过445端口控制服务器
- 宾馆管理系统java外文文献_javaEE酒店管理系统论文+任务书+设计源码+答辩PPT
- WebApp最佳实践用户体验篇:针对多种屏幕尺寸合理设计
- [TTF字体]提取TTF字体的轮廓(二)
- 创业公司期权如何运作
- cad布局教程_10+篇CAD三维模型一键出工程图,你掌握了?
- 将文字生成png图片
- 守望先锋,工坊规则封禁源式利用表情卡原地小跳
- win10 java更新失败_win10系统安装不了java的解决方法
- 一个等号= 二个等号== 三个等号=== 的区别
- 微信支付接口,提示:调用支付jsapi缺少参数: $key0$
- 设置stm32时钟频率 的flash等待问题?
- Jquery slider范围滑块,为两个滑块设置不同的setp值
热门文章
- 基于ansys命令流的水池静力学分析
- 极市直播丨南京理工大学魏秀参、沈阳:大规模细粒度图像检索
- 美通企业日报 | 猫途鹰联手携程打造中国顶级旅行平台;强生战略合作阿里旗下Lazada...
- 你想在网易云音乐中播放 QQ 音乐中下载的歌曲吗?用上它后助你秒实现!
- spyder python下载_Spyder Python软件-Spyder Python下载-最火手机站
- 【无机纳米材料科研制图——OriginLab 0204】Origin细胞存活率柱状图绘制
- 如何真正理解三极管饱和 放大的含义 (必收藏)
- python如何批量导出数据_【Python】批量导出数据并处理——第一弹
- MATLAB求图像的均值、中值、众数、方差、协方差、相关系数
- RecycleView 万能Adapter