(转)C# 使用BackgroundWorker
本文转载自:http://blog.csdn.net/andrew_wx/article/details/6615077
该例子为使用BackgroundWorker在TextBox文本中产生一个10000以内并且能被5整除的数(1秒产生一个)
操作界面可以启动线程,也可以停止线程,界面设计如图:
先贴代码,有注释的地方就不解释了。
整个Form1窗体代码如下
引入命名空间:
using System.Threading;
using System.Net;
完整代码:
namespace BackgroundWorkerExample
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.WorkerSupportsCancellation = true;
btn_Stop.Enabled = false;
} private void btn_Start_Click(object sender, EventArgs e)
{
txt_Text.Text = "开始产生10000以内的随机数……\n\n";
btn_Start.Enabled = false;
btn_Stop.Enabled = true;
//在后台线程开始操作
backgroundWorker1.RunWorkerAsync();
} private void btn_Stop_Click(object sender, EventArgs e)
{
backgroundWorker1.CancelAsync();
btn_Stop.Enabled = false;
btn_Start.Enabled = true;
} private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
//不要直接使用组件实例名称(backgroundWorker1),因为有多个BackgroundWorker时,
//直接使用会产生耦合问题,应该通过下面的转换使用它
BackgroundWorker worker = sender as BackgroundWorker;
//下面的内容相当于线程要处理的内容。//注意:不要在此事件中和界面控件打交道
Random r = new Random();
int numCount = ;
while (worker.CancellationPending == false)
{
int num = r.Next(, );
if (num % == )
{
numCount++;
worker.ReportProgress(, num);
Thread.Sleep();
}
}
e.Result = numCount;
} private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
int num = (int)e.UserState;
txt_Text.Text += num + " ";
} private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error == null)
txt_Text.Text += "\n\n操作停止,共生产" + e.Result + "个能被5整除的随机数";
else
txt_Text.Text += "\n操作过程中产生错误:" + e.Error; }
}
}
该例子在 Backgroundworker 组件的辅助线程上随机产生整数,辅助线程运行DoWork事件处理程序,当产生能被5整除的整数时,使用ProgressChanged事件把整数显示到窗体上。程序执行到 RunWorkerAsync 方法时,将启动后台线程。 在Dowork事件中,如果应用程序没有取消后台操作,将不停的产生随机整数,然后判断该整数能否被5整除,如果能被5整除,执行work.ReportProgress方法来触发 ProgressChanged 事件,在 ProgressChanged 事件中与界面长须打交道,把生产的随机整数显示到窗体上。
界面编译后运行如图:
(转)C# 使用BackgroundWorker的更多相关文章
- C# BackgroundWorker 详解
在C#程序中,经常会有一些耗时较长的CPU密集型运算,如果直接在 UI 线程执行这样的运算就会出现UI不响应的问题.解决这类问题的主要途径是使用多线程,启动一个后台线程,把运算操作放在这个后台线程中完 ...
- 【Winform】使用BackgroundWorker控制进度条显示进度
许多开发者看见一些软件有进度条显示进度,自己想弄,项目建好后发现并没有自己想象中的那么简单...看了网上很多教程后,写了一个小Demo供网友们参考~~,Demo的网址:http://pan.baidu ...
- C# 多線程&BackgroundWorker概念入門教程
感謝以下各位作者的貢獻~ 百度經驗舉了個例子,很好理解BackgroundWorker的用途(主要是用來啟動後台線程,而不阻塞調用程式的運行),收藏一下 http://jingyan.baidu.c ...
- 【C#】【Thread】BackgroundWorker的使用
BackgroundWorker 可以用于启动后台线程. 主要的事件及参数: 1.DoWork --当执行BackgroundWorker.RunWorkerAsync方法时会触发该事件,并且传递Do ...
- 用于异步的BackgroundWorker
XAML代码: <Window x:Class="backgroundtest.MainWindow" xmlns="http://schemas.microsof ...
- C# 使用BackgroundWorker例子及注意点
该例子为使用BackgroundWorker在TextBox文本中产生一个10000以内并且能被5整除的数(1秒产生一个) 操作界面可以启动线程,也可以停止线程,界面设计如图: 先贴代码,有注释的地方 ...
- C# BackgroundWorker组件学习入门介绍
C# BackgroundWorker组件学习入门介绍 一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用BackgroundWorker来完成这一功能 ...
- winform异步系统升级—BackgroundWorker
BackgroundWorker用法实例 自己的代码,就是要执行的代码写到dowork里,ProgressChanged事件是控制进度时用的,最后的Completed事件进度完成,也就是dowork里 ...
- BackgroundWorker组件的作用
当构建一个图形化的Windows Form桌面应用程序并且需要执行在应用程序主UI线程之外的线程中长时间的任务时,BackgroundWorker类就很有用了. 要使用BackgroundWorker ...
- C# BackgroundWorker的使用
文章摘自:http://www.cnblogs.com/tom-tong/archive/2012/02/22/2363965.html BackgroundWorker 可以用于启动后台线程. 主要 ...
随机推荐
- css中的width,height,属性与盒模型的关系
这段话很容易记住盒模型: css中盒子模型包含属性margin.border.padding.content,他们可以把它转移到我们日常生活中的盒子(箱 子)上来理解,日常生活中所见的盒子也具有这些属 ...
- OpenvSwitch架构
Openvswitch的架构 数据库结构和OVS-VSCTL # ps aux | grep openvswitch root 1117 0.0 0.0 21200 1580 ? ...
- 世纪互联运营的Microsoft Azure正式支持FreeBSD虚拟机镜像
自2012年开始,微软云计算与企业事业部和Citrix思杰,NetApp达成合作,共同开发出第一版针对Hyper-V虚拟设备驱动以及相关的用户态程序,并将此称之为集成服务(Integration Se ...
- 小tip: 使用CSS将图片转换成模糊(毛玻璃)效果
去年盛夏之时,曾写过“小tip: 使用CSS将图片转换成黑白”一文,本文的模式以及内容其实走得是类似路线.CSS3 → SVG → IE filter → canvas. 前段时间,iOS7不是瓜未熟 ...
- magic矩阵 分类: 数学 2015-07-31 22:56 2人阅读 评论(0) 收藏
魔方矩阵 魔方矩阵是有相同的行数和列数,并在每行每列.对角线上的和都相等.你能构造任何大小(除了2x2)的魔方矩阵. 1.历史 魔方又称幻方.纵横图.九宫图,最早记录于我国古代的洛书.据说 ...
- c++内置函数---7
原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 内置函数 调用函数时需要一定的时间和空间的开销.一般,函数调用包括5部分: 1.程序先执行函 数调用之前 ...
- 安卓虚拟机启动后报错: 类似 SDK Manager] Error: Error parsing .....devices.xml 解决方案
昨天用android sdk manager 更新了android sdk, 我是在eclipse上面安装adt来开发android的, 而且我每次打开虚拟机的时候也报错.报错的信息都是一样的. ...
- leetcode 113 Path Sum II ----- java
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...
- JavaWeb学习记录(四)——日期和数字的格式转换
一.Date转为String (1) public class DateUtil { private static SimpleDateFormat sdf = new SimpleDateFo ...
- POJ 3041 Asteroids(最小点覆盖集)
Asteroids Time Limit: 1000MS Mem ...