您的位置:首页 > 编程语言 > C#

BackgroundWorker使用方法样例介绍 C#

2014-12-12 00:28 381 查看
BackgroundWorker使用方法:

取消是默认就支持的,而暂停则默认不支持。但通过ManualResetEvent可以对其进行干预

原帖参考:/article/4660794.html



关键代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication1
{
/// <summary>
/// QQ 458978 无名 C#开发技术 欢迎和我交流探讨
/// </summary>
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled)
MessageBox.Show("用户取消了操作");
else
{
MessageBox.Show("正常完成了操作");
}

}
//线程状态对象,这里是关键
private ManualResetEvent manualReset = new ManualResetEvent(true);

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i < 100; i++)
{
if (backgroundWorker1.CancellationPending)//如果用户申请取消
{
for (int k = i; k >= 0; k--)
{
Thread.Sleep(10);
backgroundWorker1.ReportProgress(k);//模拟一个回滚的效果
}
e.Cancel = true;
return;
}
//线程状态对象,这里是关键
manualReset.WaitOne();//如果ManualResetEvent的初始化为终止状态(true),那么该方法将一直工作,直到收到Reset信号。然后,直到收到Set信号,就继续工作。
//反之亦然
Thread.Sleep(500);
backgroundWorker1.ReportProgress(i + 1);

}

}
//启动
private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
//取消,停止
private void button2_Click(object sender, EventArgs e)
{
backgroundWorker1.CancelAsync();
}

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
this.label1.Text =e.ProgressPercentage.ToString ();
}
//暂停,继续
private void button3_Click(object sender, EventArgs e)
{
if (button3.Text == "暂停")
{
//线程状态对象,这里是关键
manualReset.Reset();//暂停当前线程的工作,发信号给waitOne方法,阻塞
button3.Text = "继续";
}
else
{
//线程状态对象,这里是关键
manualReset.Set();//继续某个线程的工作
button3.Text = "暂停";
}
}
}
}




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: