BackgroundWorker使用方法样例介绍 C#
2014-12-12 00:28
381 查看
BackgroundWorker使用方法:
取消是默认就支持的,而暂停则默认不支持。但通过ManualResetEvent可以对其进行干预
原帖参考:/article/4660794.html
关键代码:
取消是默认就支持的,而暂停则默认不支持。但通过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 = "暂停"; } } } }
相关文章推荐
- C# 递归函数详细介绍及使用方法
- C#中listview的使用方法介绍
- 关于C# 5.0 CallerMemberName CallerFilePath CallerLineNumber 在.NET4中的使用介绍方法
- c#中跨线程调用windows窗体控件 .我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传统方法来做这个问题,下面我将详细的介绍。
- CSS3中transform,transition和animation的简单介绍和使用方法演示样例
- C#中使用SQLite数据库的方法介绍
- extern外部方法使用C#简单样例
- [置顶] [C#] delegate/event 的详细使用方法介绍与例程
- C#中的yield关键字的使用方法介绍
- C# 递归函数详细介绍及使用方法
- C#开发里List控件的使用方法介绍
- c# ArrayList 的 Sort()方法的使用
- 使用匿名方法、迭代器和局部类书写优雅的C#代码(一)(翻译)
- C#中使用split分割字符串的几种方法
- 转 c# ArrayList 的 Sort()方法的使用
- 测试驱动开发方法介绍及CPPUnit使用指南
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(二)----使用方法