在客户端中,为了防止界面假死状态,或者不能拖动界面,可以使用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相关推荐

  1. C#中的BackgroundWorker控件

    Keywords: C# .NET BackgroundWorker Source: http://txw1958.cnblogs.com/ BackgroundWorker是.NET Framewo ...

  2. Winform中设置BackgroundWorker在取消时关闭后台进程不生效-没有跳出循环

    场景 Winform中设置BackgroundWorker在取消时关闭后台进程: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...

  3. Winform中设置BackgroundWorker在取消时关闭后台进程

    场景 在Winform中拖拽 一个BackgroundWorker控件,配合进度条控件能开启一个后台线程并报告进度条进度. 但是在执行后台线程的任务时,如果想要取消,怎样让其停止执行. 注: 博客主页 ...

  4. 如果在BackgroundWorker运行过程中关闭窗体…

    在Windows Form应用中,BackgroundWorker 类允许您在单独的专用线程上运行操作.耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态 ...

  5. C BackgroundWorker类详细说明

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Back ...

  6. BackgroundWorker学习笔记

    1 简介 BackgroundWorker 类允许您在单独的专用线程上运行操作. 耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态. 如果您需要能进行响 ...

  7. 【C#】【Thread】BackgroundWorker的使用

    BackgroundWorker 可以用于启动后台线程. 主要的事件及参数: 1.DoWork --当执行BackgroundWorker.RunWorkerAsync方法时会触发该事件,并且传递Do ...

  8. 关于net2.0里面新出现的一个异步处理类backgroundworker

    这是一个在.net2.0里面新出现的类,用于执行后台比较长的任务而又想能和UI有点操作的应用里面. 在研究一个桌面应用程序的时候,看到了backgroundworker 这个类下面是从网上摘要的该类用 ...

  9. GNU Make 使用手册(于凤昌中译版)

    GNU Make 使用手册(中译版) 翻译:于凤昌 GNU make Version 3.79 April 2000 Richard M. Stallman and Roland McGrath 1 ...

  10. JavaScript多线程之HTML5 Web Worker

    在博主的前些文章Promise的前世今生和妙用技巧和JavaScript单线程和浏览器事件循环简述中都曾提到了HTML5 Web Worker这一个概念.在JavaScript单线程和浏览器事件循环简 ...

最新文章

  1. Top 10 Mistakes Java Developers Make(转)
  2. ERPLAB中文教程:高级EvenList选项
  3. selenium启动Firefox示例
  4. opengl 深度详解_OpenGL中的深度测试
  5. 797. 所有可能的路径
  6. 人工智能python课程总结1500字_李开复的《人工智能》读后感1500字
  7. 代码风格研究:左花括号 是否换行???
  8. web安全day20:今天讲清楚漏洞和木马的区别,最后一个实验演示通过445端口控制服务器
  9. 宾馆管理系统java外文文献_javaEE酒店管理系统论文+任务书+设计源码+答辩PPT
  10. WebApp最佳实践用户体验篇:针对多种屏幕尺寸合理设计
  11. [TTF字体]提取TTF字体的轮廓(二)
  12. 创业公司期权如何运作
  13. cad布局教程_10+篇CAD三维模型一键出工程图,你掌握了?
  14. 将文字生成png图片
  15. 守望先锋,工坊规则封禁源式利用表情卡原地小跳
  16. win10 java更新失败_win10系统安装不了java的解决方法
  17. 一个等号= 二个等号== 三个等号=== 的区别
  18. 微信支付接口,提示:调用支付jsapi缺少参数: $key0$
  19. 设置stm32时钟频率 的flash等待问题?
  20. Jquery slider范围滑块,为两个滑块设置不同的setp值

热门文章

  1. 基于ansys命令流的水池静力学分析
  2. 极市直播丨南京理工大学魏秀参、沈阳:大规模细粒度图像检索
  3. 美通企业日报 | 猫途鹰联手携程打造中国顶级旅行平台;强生战略合作阿里旗下Lazada...
  4. 你想在网易云音乐中播放 QQ 音乐中下载的歌曲吗?用上它后助你秒实现!
  5. spyder python下载_Spyder Python软件-Spyder Python下载-最火手机站
  6. 【无机纳米材料科研制图——OriginLab 0204】Origin细胞存活率柱状图绘制
  7. 如何真正理解三极管饱和 放大的含义 (必收藏)
  8. python如何批量导出数据_【Python】批量导出数据并处理——第一弹
  9. MATLAB求图像的均值、中值、众数、方差、协方差、相关系数
  10. RecycleView 万能Adapter