Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >backgroundworker组件的使用

backgroundworker组件的使用

作者头像
跟着阿笨一起玩NET
发布于 2018-09-19 03:05:52
发布于 2018-09-19 03:05:52
1K00
代码可运行
举报
运行总次数:0
代码可运行

本文转载:http://www.cnblogs.com/inforasc/archive/2009/10/12/1582110.html

BackgroundWorker 组件用来执行诸如数据库事务、文件下载等耗时的异步操作。

开始

在应用程序中添加一个BackgroundWorker实例,如果用的是VS,可以从工具上直接拖到应用程序:

BackgroundWorker backgroundWorker1 = new BackgroundWorker();

为了开始在后台操作,必须调用BackgroundWorker的RunWorkerAsync()方法,当调用此方时,BackgroundWorker 通过触发DoWork 事件,开始执行后台操作,DoWork 事件的代码是在另一个线程里执行的。代码如下:

代码一:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 BackgroundWorker backgroundWorker1 = new BackgroundWorker();
 //在另一个线程里开始操作(btnStart是一个按钮控件)
 //也可以利用RunWokerAsync()方法传递参数,
 private void btnStart_Click(object sender, EventArgs e) 
 { 
           backgroundWorker1.RunWokerAsync(2000/*参数是可选的*/); 
 } 
 //DoWork事件在另一个线程里执行 
 private void backgroundWorker1_DoWork(objectsender,DoWorkeventArgs e) 
 { 
         //允许长时间的操作 
  int input = (int)e.Argument; 
         Thread.Sleep(input); 
 }
 

显示后台操作进度

为了显示后台操作的执行进度,首先要使WorkerReportsProgress 等于true,然后调用BackgroundWorker的ReportProgress()方法,通过它传递操作完成的进度值,此外,该方法触发ProgressChanged事件,在是此事件中,通过ProgressChangedEventArgs的实例,接收到主线程传递过来的参数。

代码二:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 BackgroundWorker backgroundWorker1 = new BackgroundWorker();
 
 backgroundWorker1.WorkerReportsProgress = true;
 
 private void btnStart_Click(object sender, EventArgs e) 
 { 
             backgroundWorker1.RunWokerAsync(); 
 } 
 private void backgroundWorker1_DoWork(object sender, DoWorkeventArgs e) 
 { 
  for (int i = 1; i < 11; i++) 
      { 
               Thread.Sleep(2000); 
              backgroundWorker1.ReportProgress(i*10); 
      } 
 } 
 private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
 
 { 
       //progressBar1是ProgressBar控件 
       progressBar1.Value = e.ProgressPercentage; 
 }
 

取消后台操作

为了使 BackgroundWorker 可以取消后台正在执行的操作,首先要把属性WorkerSupportsCancellation 的值设置为 true。接着调用CancelAsync()方法,该方法使得属性CancellationPending 为true,利用CancellationPending 属性,可以判断是否取消后台异步操作。

代码三:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 BackgroundWorker backgroundWorker1 = new BackgroundWorker(); 
 backgroundWorker1.WorkerReportsProgress = true;
 
 backgroundWorker1.WorkerSupportsCancellation = true; 
 private void btnStart_Click(object sender, EventArgs e) 
 { 
        backgroundWorker1.RunWokerAsync(); 
 } 
 private void btnCancel_Click(object sender, EventArgs e) 
 { 
       backgroundWorker1.CancelAsync(); 
 } 
 private void backgroundWorker1_DoWork(object sender, DoWorkeventArgs e) 
 { 
       for (int i = 1; i < 11; i++) 
      { 
              Thread.Sleep(2000); 
              backgroundWorker1.ReportProgress(i*10); 
             if(backgroundWorker1.CancellationPending) 
             { 
                    e.Cancel = true; 
                    return; 
              } 
       } 
 } 
 private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) 
 { 
          progressBar1.Value = e.ProgressPercentage; 
 } 
  
 

后台操作完成后,反馈给用户

当后台操作完成以后,无论是completed 还是cancelled,则RunWorkerCompleted 事件被触发,通过此方法可以将后台操作的完成结果反馈给用户;

另外,通过RunWorkerCompletedEventArgs实例的Cancelled 属性,以判断是否是Cancel操作使得后台操作终止;

代码片段:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
 if(e.Cancelled)
 
 {
 
        MessageBox.Show("Operation Cancelled");
 
 }
 
 else
 
 {
 
        MessageBox.Show("OperationCompleted");
 
 }
 
}

从后台操作返回值

在执行DoWork 事件时,DoWorkEventArgs 实例的Result 属性,返回值到用户;在RunWorkerCompleted 事件里,RunWorkerCompletedEventArgs 实例的Result 属性接收值;

代码片段:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void backgroundWorker1_DoWork(object sender, DoWorkeventArgs e) 
{ 
 Thread.Sleep(2000);
 
 //在此处设置返回值
 
 e.Result = 10;
 
} 
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
 //在此处接收传递回来的值
 
 int returnValue = (int)e.Result;
 
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-02-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python数据可视化,被Altair圈粉了
这幅图是用Python的可视化库Altair绘制的,Altair可以使用强大而简洁的可视化语法快速开发各种统计可视化图表。用户只需要提供数据列与编码通道之间的链接,例如x轴,y轴,颜色等,其余的绘图细节它会自动处理。
统计学家
2020/12/08
1.5K0
Python数据可视化,被Altair圈粉了
Google数据可视化团队:数据可视化指南(中文版)
数据可视化是一种以图形描绘密集和复杂信息的表现形式。数据可视化的视觉效果旨在使数据容易对比,并用它来讲故事,以此来帮助用户做出决策。
小F
2021/03/18
5.3K0
Google数据可视化团队:数据可视化指南(中文版)
52个数据可视化图表鉴赏
一、数据可视化,是关于数据视觉表现形式的科学技术研究。其中,这种数据的视觉表现形式被定义为,一种以某种概要形式抽提出来的信息,包括相应信息单位的各种属性和变量。它是一个处于不断演变之中的概念,其边界在不断地扩大。主要指的是技术上较为高级的技术方法,而这些技术方法允许利用图形、图像处理、计算机视觉以及用户界面,通过表达、建模以及对立体、表面、属性以及动画的显示,对数据加以可视化解释。与立体建模之类的特殊技术方法相比,数据可视化所涵盖的技术方法要广泛得多。
数据STUDIO
2022/02/24
6.1K0
52个数据可视化图表鉴赏
你知道怎么用Pandas绘制带交互的可视化图表吗?
之前咱们介绍过Pandas可视化图表的绘制《『数据可视化』一文掌握Pandas可视化图表》,不过它是依托于matplotlib,因此无法进行交互。但其实,在Pandas的0.25.0版本之后,提供了一些其他绘图后端,其中就有我们今天要演示的主角基于Bokeh!
可以叫我才哥
2021/09/24
3.9K0
24个简单、好看的可视化图表用法介绍!数据分析小白必看
最近经常和朋友聊起可视化的事情,发现不少人新手经常不会选择合适的图表,从而导致做出来的数据分析报告不尽如人意,今天就针对图表选择来分享一些技巧
大数据分析不是事儿
2020/12/24
6.2K0
数据可视化:认识Matplotlib
数据经过NumPy和Pandas的计算,最终得到了我们想要的数据结论,但是这些数据结论并不直观,所以想要把数据分析的结论做到可视化,让任何其他人看起来毫无压力,那么Matplotlib将派上用场。
马拉松程序员
2023/09/02
2950
数据可视化:认识Matplotlib
【数据可视化】Echarts最常用图表
在上一篇博客中提到了【数据可视化】数据可视化入门前的了解,这次来看看Echarts最常用图表有哪些,和作用是什么?
zxctscl
2024/03/16
6520
【数据可视化】Echarts最常用图表
可视化图表入门教程
数据可视化,即通过图表形式展现数据,帮助我们快速、准确理解信息。好的可视化会“讲故事”,能向我们揭示数据背后的规律。
iCDO互联网数据官
2018/07/27
2.5K0
可视化图表入门教程
数据可视化设计指南(信息图表篇)
今天分享一篇关于数据可视化设计的好文。 正文 在如今的工作中(尤其是 B 端)越来越多的会开始出现数据可视化的身影,对于一部分小伙伴来说这个概念是较为陌生的,面对这道无形之中提升的“门槛”我们常常会表现的手足无措。所以,为了让大家对于数据可视化不再那么束手无措,我希望能通过这篇文章和大家一起交流学习,解决一些属于我们共同的问题。 那么我们还是老规矩,想要了解一个事物首先需要知道的是它的定义。 数据可视化的基本信息 1. 数据可视化的定义 较为笼统的来说数据可视化是一种由图形、图像、数字等元素组成的语言用
张俊红
2022/08/26
1K0
数据可视化设计指南(信息图表篇)
33种经典图表类型总结,轻松玩转数据可视化
导读:随着时代的发展,越来越多的数据量堆积,然而这些密密麻麻的数据的可读性较差并且毫无重点,而数据可视化更加直观有意义,更能帮助数据更易被人们理解和接受。
IT阅读排行榜
2018/11/07
5K0
『数据可视化』一文掌握Pandas可视化图表
今天简单介绍一下Pandas可视化图表的一些操作,Pandas其实提供了一个绘图方法plot(),可以很方便的将Series和Dataframe类型数据直接进行数据可视化。
可以叫我才哥
2021/08/05
8.4K0
数据可视化?不如用最经典的工具画最酷炫的图
做数据分析和做科普是类似的,科普的意义在于将晦涩难懂的科学知识,以让大众更易接受和理解的方式呈现。而数据分析中的数据可视化做的正是如此关键中的关键,即是将数据的特点以一种显而易见的形式进行呈现。但也不必说的那么高级,我们可以说数据可视化就是“画图”。
朱小五
2021/04/21
2.8K0
数据可视化?不如用最经典的工具画最酷炫的图
再谈可视化:如何展示数据
如何来展现的你的数据?是你有时不得不去思考的一个问题。不同的展示方法,其效果往往差异巨大。这里我将结合近期的一些阅读和实践,试图给出一些方法,希望能帮助到你。
用户5548425
2020/04/14
2.8K0
再谈可视化:如何展示数据
搞定高质量数据可视化的20条建议
如今,商业领域的决策越来越重视数据驱动,数据可视化已经是当今的潮流。高质量的数据可视化能帮助人们更好地解读数据的意义,发掘数据背后的价值。但是我们发现,实践中很多图表并不容易让人理解,甚至会产生误导。因此本文列出如下20条优化建议,希望能够帮助你实现更好的数据可视化。 01 选择正确的图表类型 如果选择了错误的图表类型,或只是默认使用最常见的图表类型,可能会使用户感到困惑,或对数据的意义产生误解。 一个数据集可以用很多种方式来表述,具体采用哪种方式要取决于用户的需求。 所以一定要从检查数据集和调研用户需求着
张俊红
2022/09/06
2K0
搞定高质量数据可视化的20条建议
可视化图表样式使用大全
Severino Ribecca 是一位平面设计师,也是数据可视化的爱好者,他在自己的网站上收录了 60 种可视化图表样式以及它们分别适用于什么样的场景,并且推荐了相应的制作工具。
代码医生工作室
2020/02/20
9.7K0
20个小技巧,让数据可视化图表更专业!
数据可视化是数据展示的常见方式,所谓一图抵千言,好的图表能高效传递信息,让观众一目了然,差的图表往往会不知所云。
派大星的数据屋
2022/04/03
2.9K0
20个小技巧,让数据可视化图表更专业!
数据可视化设计过程:面向初学者的循序渐进指南
首先,我们必须做一些计划,先不要急着马上从图形下手。从长远来看,一点点的前期计划可以节省数小时的血液,汗水和眼泪。
Banber可视化云平台
2021/09/17
1.4K0
数据可视化图表
常听到一句话,“能用图描述的就不用表,能用表就不用文字”。这句话也直接的表明了:在认知上,大家对于图形的敏感度远比文字高。
Python数据科学
2019/06/03
2.1K0
17 种经典图表总结,轻松玩转数据可视化!
导读:随着时代的发展,越来越多的数据量堆积,然而这些密密麻麻的数据的可读性较差并且毫无重点,而数据可视化更加直观有意义,更能帮助数据更易被人们理解和接受。
小小詹同学
2019/06/20
1.1K0
17 种经典图表总结,轻松玩转数据可视化!
Python Bokeh 库进行数据可视化实用指南
我相信大家已经阅读了不少有关“机器学习”、“数据科学家”、“数据可视化”等话题的文章。有些人将数据科学称为 21 世纪最性感的工作。 Anaconda 的《2020 年数据科学状况报告》指出,21% 的时间用于数据可视化。使用工具或库来帮助我们完成讲故事的流程很重要。
数据STUDIO
2021/11/25
5.7K0
Python Bokeh 库进行数据可视化实用指南
推荐阅读
相关推荐
Python数据可视化,被Altair圈粉了
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验