(转)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 可以用于启动后台线程. 主要 ...
随机推荐
- linux/windows 下kill某个pid的进程
[linux环境] 方法1:截取进程pid,再kill ps -ef | grep java.endorsed.dirs | grep -v grep | cut -c10-15 | xargs ki ...
- #include #import @class 的一些用法区别
从网上查了一些资料,整理了一下,发现很多都说的比较详尽,下面摘录自网络 说一下#import同class之间的区别 在ios中我们经常会在.h和.m中引入一些类啊等等一般用的是#import来进行声明 ...
- 用python做爬虫的例子
主要就是用了两个库,urllib和BeautifulSoup. 作用是从HTML中解析出解梦的查询词和具体的解释. # -*- coding: utf-8 -*- import urllib, url ...
- 标准盒模型与ie盒模型
ff(标准的盒模型) Box的宽高包括 padding .border.margin.content区域 ie Box的宽度包括 margin content区域(content区域包含paddi ...
- Android——多线程编程练习题
随便选择两个城市作为预选旅游目标.实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市.分别用Runnable接口和Thread类实 ...
- CentOS 6.0修改ssh远程连接端口
转自:系统运维 » CentOS 6.0修改ssh远程连接端口 实现目的:把ssh默认远程连接端口修改为2222 方法如下: 1.编辑防火墙配置:vi /etc/sysconfig/iptables ...
- (转)The 9 Deep Learning Papers You Need To Know About (Understanding CNNs Part 3)
Adit Deshpande CS Undergrad at UCLA ('19) Blog About The 9 Deep Learning Papers You Need To Know Abo ...
- Html-双斜杠//开头的URL(依赖协议的URL)
今天看京东HTTPS,发现链接都是这种 <a href="//chaoshi.jd.com">京东超市</a> URL是以双斜杠"//" ...
- WaitAny, WaitAll 和 SignalAndWait
除了Set 和 WaitOne方法外,在类WaitHandle中还有一些用来创建复杂的同步过程的静态方法. WaitAny, WaitAll 和 SignalAndWait使跨多个可能为不同类型的等待 ...
- Measuring the amount of writes in InnoDB redo logs
Choosing a good InnoDB log file size is key to InnoDB write performance. This can be done by measuri ...