C# BackgroundWorker组件学习

一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用BackgroundWorker来完成这一功能.

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

如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用 BackgroundWorker类方便地解决问题(MSDN)。

若要在后台执行耗时的操作,请创建一个 BackgroundWorker,侦听那些报告操作进度并在操作完成时发出信号的事件。  可以通过编程方式创建 BackgroundWorker,

也可以将它从“工具箱”的“组件”选项卡中拖到窗体上。  如果在 Windows 窗体设计器中创建 BackgroundWorker,则它会出现在组件栏中,而且它的属性会显示在“属性”窗

口中(MSDN)。

  属性:

IsBusy:获取一个值,指示 BackgroundWorker 是否正在运行异步操作。

WorkerReportsProgress:获取或设置一个值,该值指示 BackgroundWorker 能否报告进度更新。

WorkerSupportsCancellation:获取或设置一个值,该值指示 BackgroundWorker 是否支持异步取消。

  事件:

DoWork:调用 RunWorkerAsync 时发生。

ProgressChanged:调用 ReportProgress 时发生。

RunWorkerCompleted:当后台操作已完成、被取消或引发异常时发生。

实例:

窗体设计如下图:

代码实现:

  

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace WindowsFormsApplication2
{public partial class Form1 : Form{public Form1(){InitializeComponent();backgroundWorker1.WorkerReportsProgress = true;backgroundWorker1.WorkerSupportsCancellation = true;}private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e){BackgroundWorker worker = sender as BackgroundWorker;for (int i = 1; i <= 12; i++){if (worker.CancellationPending == true){e.Cancel = true;break;}else{System.Threading.Thread.Sleep(500);worker.ReportProgress(i * 10);}}}private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e){lbResult.Text = (e.ProgressPercentage.ToString() + "%"+e.UserState);}private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e){if (e.Cancelled == true){lbResult.Text = "Canceled!";}else if (e.Error != null){lbResult.Text = "Error: " + e.Error.Message;}else{lbResult.Text = "Done!";}}private void btnStartAsync_Click(object sender, EventArgs e){if (backgroundWorker1.IsBusy != true){backgroundWorker1.RunWorkerAsync();}}private void btnCancelAsync_Click(object sender, EventArgs e){if (backgroundWorker1.WorkerSupportsCancellation == true){backgroundWorker1.CancelAsync();}}}
}

运行结果:

转载于:https://www.cnblogs.com/GaoHuhu/p/3359340.html

C# BackgroundWorker组件学习相关推荐

  1. c# BackgroundWorker组件介绍(属性、方法、事件)

    c# BackgroundWorker组件介绍(属性.方法.事件) 2008-07-03 16:28 在VS2005中添加了BackgroundWorker组件,该组件在多线程编程方面使用起来非常方便 ...

  2. 微信小程序_基础组件学习02

    微信小程序_基础组件学习02 swiper组件 swiper是滑块容器,也就是手机端的轮播图. swiper组件有两部分组成swiper和swiper-item. swiper-item需要放在swi ...

  3. React学习:双向数据绑定、约束性和非约束性组件-学习笔记

    文章目录 React学习:双向数据绑定.约束性和非约束性组件-学习笔记 表单 约束性和非约束性组件(受限/非受限) 双向数据绑定小例子 React学习:双向数据绑定.约束性和非约束性组件-学习笔记 表 ...

  4. Winform使用BackgroundWorker组件进行异步编程

    概述 在应用程序中,可能会遇到一些执行耗时的功能操作,比如数据下载.复杂计算及数据库事务等,一般这样的功能会在单独的线程上实现,执行结束后结果显示到用户界面上,这样可避免造成用户界面长时间无响应情况. ...

  5. B06 - 999、大数据组件学习③ - Hive

    初学耗时:999h 注:CSDN手机端暂不支持章节内链跳转,但外链可用,更好体验还请上电脑端. 『   因为要去见那个不一般的人,所以我就不能是一般人.』  B99.要学就学大数据 - B系列总纲   ...

  6. B15 - 999、大数据组件学习⑫ - Hue

    初学耗时:999h 注:CSDN手机端暂不支持章节内链跳转,但外链可用,更好体验还请上电脑端. 『   因为要去见那个不一般的人,所以我就不能是一般人.』  B99.要学就学大数据 - B系列总纲   ...

  7. RN基础以及组件学习技巧

    RN基础以及组件学习技巧 上一篇博客讲了RN环境的搭建,和RN项目的创建以及运行,如有什么问题,可以留言 这节讲下RN基础以及组件的学习 这是RN项目的结构图,index.android.js 和 i ...

  8. Vue 组件学习总结

    本文主要是对 Vue 组件学习的总结和之后要写的内容的计划. 组件学习总结 组件库的本质是什么? 组件库其实就是一堆组件组成的一个项目,一般项目里会有组件和演示项目.当项目调试时 webpack 打包 ...

  9. 第三课 k8s源码学习和二次开发-缓存机制Informers和Reflector组件学习

    第三课 k8s源码学习和二次开发-缓存机制Informers和Reflector组件学习 tags: k8s 源码学习 categories: 源码学习 二次开发 文章目录 第三课 k8s源码学习和二 ...

  10. B19 - 999、大数据组件学习⑯ - ElasticSearch

    初学耗时:999h 注:CSDN手机端暂不支持章节内链跳转,但外链可用,更好体验还请上电脑端. 『   因为要去见那个不一般的人,所以我就不能是一般人.』  ギ 舒适区ゾ || ♂ 累觉无爱 ♀ B1 ...

最新文章

  1. thonny python ide_学习用 Thonny 写代码:一个面向初学者的Python IDE
  2. mod_pagespeed
  3. 基于小波和插值的超分辨率图像重建算法
  4. webpack从入门到精通(四)优化打包配置总结②
  5. NETINT刘伟:ASIC才是未来
  6. oracle安装后开机很慢,Windows下安装Oracle拖慢开机速度的解决方法
  7. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(12) - 预取指令与SFENCE指令
  8. spark学习-32-SparkEnv的构造步骤
  9. oracle 11g 数据库恢复技术 --rman catalog
  10. idea全局主题_2020年最新-IDEA最详细配置(配图文收藏版配置)
  11. 固高板卡mct2008调试轴回零_更新-LabVIEW固高函数库源码文档调试软件-2019年4月14日...
  12. Kubernetes tutorial - K8S 官方入门教程 中文翻译
  13. python ocr识别身份证_Python+opencv+pytesseract实现身份证号码识别
  14. 计算机固态硬盘作用,固态硬盘是什么及作用
  15. ER图(实体联系图)
  16. 神战奇迹服务器维护,神战奇迹手游官网
  17. Java企业微信号开发之微信网页授权和获取用户信息
  18. 商标45类分类表明细表_45类商标分类明细_45类商标经营范围包括哪些商品-商标查询-知夫子...
  19. OPA1612AIDR IC AUDIO 2 CIRCUIT 8SOIC
  20. 数据分析之Excel的基本功能(上)

热门文章

  1. 超级有意思的图片注释
  2. 【NOIP2014模拟8.25】设备塔
  3. 数据库操作之整合Mybaties和事务讲解 5节课
  4. mysql 无法退出sql命令行编辑
  5. 130242014051 《商品详情模块》需求分析与设计实验课小结
  6. 《oracle每天一练》Oracle冷备份与数据恢复
  7. VJ 1490 小菜的数码验证
  8. android开发学习笔记系列(1)-android起航
  9. 继承求不同形状图形的周长和面积
  10. 20155320 Exp3 免杀原理与实践