首先我们要知道为什么要用这个

如果你需要异步操作的话,不影响前台UI操作的吗,那么就可以使用这个。更方便的进行异步操作。

同时可以跨线程调用其他的控件。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;namespace BackgroudWorkerTest
{public partial class Form1 : Form{public Form1(){InitializeComponent();}//private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e){string str = e.Argument.ToString();for(int i=0;i<100;i++){Thread.Sleep(100);//该函数可以传递数字进度,还有文字信息给backgroundWorker1_ProgressChanged事件。触发backgroundWorker1_ProgressChangedbackgroundWorker1.ReportProgress(i,"百分比");//int t = (i - 7) / (i-7);  //测试 异常是否会在 complete事件中抓到if (backgroundWorker1.CancellationPending == true){e.Cancel = true; //这里设置 cancel未true,那么在backgroundWorker1_RunWorkerCompleted中可以获取到break;}}e.Result = "执行完成";//这里设定操作结果,但是有一个重点就是,如果 cancel被设置成true,那么backgroundWorker1_RunWorkerCompleted将无法通过e.Result获取结果}private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e){this.progressBar1.Value = e.ProgressPercentage;this.label1.Text = e.ProgressPercentage + e.UserState.ToString();}private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e){this.progressBar1.Value = 0;// 可以在这里操作界面的控件if (e.Error != null) // 如果dowork中报错,可以在这里获取到报错的事件进行处理{Type errorType = e.Error.GetType();MessageBox.Show(e.Error.Message);}if (e.Cancelled){MessageBox.Show("已关闭");}else{MessageBox.Show(e.Result.ToString());//cancelld==true,result将无法获取,会报错}}private void button1_Click(object sender, EventArgs e){if(!backgroundWorker1.IsBusy)//如果后台已经使用,再次点击无效{    //这个方法会调用backgroundWorker1_DoWorkbackgroundWorker1.RunWorkerAsync("test");//传递参数}//backgroundWorker1.ReportProgress(90);//当操作中时,显示进度while(backgroundWorker1.IsBusy){progressBar2.Increment(1);// Keep UI messages moving, so the form remains// responsive during the asynchronous operation.Application.DoEvents();}}private void Form1_Load(object sender, EventArgs e){backgroundWorker1.WorkerReportsProgress = true;//设置BackgroundWorker 能否报告进度更新。如果是flase,那么backgroundWorker1.ReportProgress将无法使用backgroundWorker1.WorkerSupportsCancellation = true;//设置是否可以取消异步操作}private void button2_Click(object sender, EventArgs e){if(backgroundWorker1.WorkerSupportsCancellation){backgroundWorker1.CancelAsync();//这个方法会设置backgroundWorker1.CancellationPending为true。但我们仍需要编写辅助代码在dowork中,手动取消事件操作}}}
}

C# BackgroundWorker使用讲解相关推荐

  1. Backgroundworker与Thread的区别

    最近项目要用到,窗体Form程序要在后台开启几个子线程,负责和其他端进行通信,异步读写,并且来更改UI.在网上查了有Backgroundworker与Thread两种方法. 1.Backgroundw ...

  2. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

  3. 详细通俗重点CRF层讲解

    本文翻译自GitHub博客上的原创文章,结尾有原文链接.文章没有晦涩的数学公式,而是通过实例一步一步讲解CRF的实现过程,是入门CRF非常非常合适的资料. 相关项目代码: BERT-BiLSMT-CR ...

  4. 高级数据结构讲解与案例分析

    然而,仅仅掌握好它们不足以应付大厂的算法面试的.为了达到对时间和空间复杂度的理想要求,本节课探究高级数据结构,它们的实现要比那些常用的数据结构要复杂得多.其中重点介绍: 优先队列 图 前缀树 线段树 ...

  5. php 伪静态 page-18.html,PHP 伪静态实现技术原理讲解

    PHP 伪静态实现技术原理讲解 发布于 2015-01-18 23:52:58 | 129 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext Pre ...

  6. C# BackgroundWorker 详解

    C# BackgroundWorker 详解 在C#程序中,经常会有一些耗时较长的CPU密集型运算,如果直接在 UI 线程执行这样的运算就会出现UI不响应的问题.解决这类问题的主要途径是使用多线程,启 ...

  7. ssm开发框架原理_SSM 单体框架 - 前端开发:视频讲解

    视频讲解 知乎视频​www.zhihu.com 知乎视频​www.zhihu.com 知乎视频​www.zhihu.com 知乎视频​www.zhihu.com 知乎视频​www.zhihu.com ...

  8. python计算wav的语谱图_Python实现电脑录音(含音频基础知识讲解)

    前言 今天开始进入近期系列文章的第一篇,如何用 Python 来实现录音功能. 在开始"造轮子"之前,个人一直强调一个观点,如果有些东西已经有了,不妨直接去 github 上搜,用 ...

  9. PCL:k-d tree 1 讲解

    1.简介 kd-tree简称k维树,是一种空间划分的数据结构.常被用于高维空间中的搜索,比如范围搜索和最近邻搜索.kd-tree是二进制空间划分树的一种特殊情况.(在激光雷达SLAM中,一般使用的是三 ...

  10. 基础矩阵,本质矩阵,单应性矩阵讲解

    ORB-SLAM点云地图中相机的位姿初始化,无论算法工作在平面场景,还是非平面场景下,都能够完成初始化的工作.其中主要是使用了适用于平面场景的单应性矩阵H和适用于非平面场景的基础矩阵F,程序中通过一个 ...

最新文章

  1. 获得本页面URL地址
  2. Java-Web JSTL标签库、自定义标签库和MVC设计模式
  3. JavaScript eval() 函数
  4. 揭秘TensorFlow:Google开源到底开的是什么?
  5. leetcode-回文链表
  6. Weak Pair HDU - 5877 树状数组+离散化+DFS遍历
  7. 预测回归_回归分析预测技术简介
  8. C#Winform调用网页中的JS方法
  9. 物联网终端五年后将超 270 亿!破竹之势下程序员如何修炼内功?
  10. onSingleTapUp()和onSingleTapConfirmed()的区别
  11. 华为机试HJ9:提取不重复的整数
  12. 用Python强制子类重写父类,如此简单就能做到
  13. Educational Codeforces Round 50: F. Relatively Prime Powers(莫比乌斯函数)
  14. 线性规划 (二) 单纯形法
  15. ora-01031:insufficient privileges解决方法总结
  16. C/C++ Npcap包实现数据嗅探
  17. 有限单元法(The Finite Element Method)
  18. 云服务器怎么安装声音驱动_GPU云服务器如何安装NVIDIA Tesla驱动
  19. GG修改服务器迷你世界,gg修改器脚本大全迷你世界设置回点
  20. 短信机bug,发短信发的直吐血…………

热门文章

  1. web前端开发技术期末考试_(完整word版)web前端开发技术试卷三
  2. 酒店管理系统web版/Java酒店管理系统
  3. 3个重点,20个函数分析,浅析FFmpeg转码过程
  4. jsp代码编写简单的BBS论坛项目的总结
  5. Gaussview保存文件时,对话框一直弹不出来的原因
  6. 智能电网输电线路覆冰在线监测系统
  7. java pdf合并_利用iText 合并PDF与分解PDF的例子
  8. 计算机专业职业规划范文800字,计算机专业学生职业生涯规划书
  9. java中solr的面试题_面试:----利用solr实现商品的搜索功能
  10. android app邀请码,还在用邀请码邀请注册吗?落后咯!!!我家APP自带邀请码的