c#中关于backgroundWorker控件的用法 (转)
来源:互联网 发布:数据流量控制 编辑:程序博客网 时间:2024/06/12 21:54
http://www.cnblogs.com/xiaodsn/archive/2010/12/30/1921434.html
BackgroundWorker类是.net 2.0里新增加的一个类,对于需要长时间操作而不需要用户长时间等待的情况可以使用这个类。
* 注意确保在 DoWork 事件处理程序中不操作任何用户界面对象。而应该通过 ProgressChanged 和 RunWorkerCompleted 事件与用户界面进行通信。
* 它有几个属性:
* CancellationPending——指示应用程序是否已请求取消后台操作。
* IsBusy——指示 BackgroundWorker 是否正在运行异步操作
* WorkerReportsProgress——该值指示 BackgroundWorker 能否报告进度更新
* WorkerSupportsCancellation——该值指示 BackgroundWorker 是否支持异步取消
* 还有如下事件:
* DoWork——调用 RunWorkerAsync 时发生。
* ProgressChanged——调用 ReportProgress 时发生。
* RunWorkerCompleted——当后台操作已完成、被取消或引发异常时发生。
*
* 还有如下方法:
* CancelAsync——请求取消挂起的后台操作
* ReportProgress——引发 ProgressChanged 事件
* RunWorkerAsync——开始执行后台操作
所需控件如下: 三个textbox,两个button,一个进度条,一个backgroundWorker控件
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//设置计算按扭与取消按扭的使用属性以及进度条的进度值
this.button1.Enabled = false;
this.textBox3.Text = string.Empty;
this.button2.Enabled = true;
this.progressBar1.Value = 0;
backgroundWorker1.RunWorkerAsync(new CalcInput(int.Parse(this.textBox1.Text), int.Parse(this.textBox2.Text)));//开始执行后台操作
}
//当执行后台操作时,后台线程开始执行此操作
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
CalcInput input = (CalcInput)e.Argument;
//System.Threading.Thread.Sleep(5000);
//e.Result = input.x + input.y;
for (int i = 0; i < 10; i++)
{
System.Threading.Thread.Sleep(500);
backgroundWorker1.ReportProgress(i * 10);
if (backgroundWorker1.CancellationPending)
{
e.Cancel = true;
return;
}
}
e.Result = input.x + input.y;
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.progressBar1.Value = e.ProgressPercentage; //设置进度条的value值
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//this.textBox3.Text = e.Result.ToString();
//this.button2.Enabled = true;
//this.button1.Enabled = false;
//this.progressBar1.Value = 100;
if (e.Cancelled)
{
this.textBox3.Text = "cancelled";
}
else
{
this.textBox3.Text = e.Result.ToString();
}
this.button2.Enabled = true;
this.button1.Enabled = false;
this.progressBar1.Value = 100;
}
private void button2_Click(object sender, EventArgs e)
{
backgroundWorker1.CancelAsync();//执行此操作时,需将backgroundWorker1控件WorkerSupportCancellation属性设置为true
}
}
//记录两个文本框的值
public struct CalcInput
{
public CalcInput(int x, int Y)
{
this.x = x;
this.y = Y;
}
public int x;
public int y;
}
- c#中关于backgroundWorker控件的用法 (转)
- c#中BackGroundWorker控件
- C#中BackgroundWorker的最简单用法
- c# BackgroundWorker的基本用法
- C#后台运行控件BackgroundWorker的使用方法
- BackgroundWorker线程控件用法
- c# BackgroundWorker控件使用方法
- C# backgroundworker 控件使用
- c# BackgroundWorker控件使用方法
- c# BackgroundWorker控件使用方法
- c# BackgroundWorker控件使用方法
- C#中的BackgroundWorker控件
- C#中的BackgroundWorker控件
- C#中的BackgroundWorker控件
- C# winform backgroundWorker用法
- 【c#】关于c#中data控件的简单用法介绍
- C#中BackgroundWorker对象的使用
- C#多线程操作控件的两种安全方式(委托方式和BackgroundWorker控件方式)
- 二篇——从图像到视频
- Hibernate3.4+struts1.3分页的封装
- 自学matlab的感悟
- 记一下
- spring+hibernate的c3p0 连接池配置
- c#中关于backgroundWorker控件的用法 (转)
- ubuntu下mysql的安装与配置
- Qt 图形特效(Graphics Effect)介绍
- linux查看内核cpu mem gcc libc信息的命令
- IT知名企业常见面试题实例与详解
- FrameSet
- 开源网站、中文分词等
- BSS段、数据段、代码段、堆与栈
- libc、glibc与gcc