首页 > 代码库 > 支持取消操作和暂停操作的Backgroundworker示例一则
支持取消操作和暂停操作的Backgroundworker示例一则
摘要:Backgroundworker是默认支持取消功能的,但是默认不支持暂停。本文通过ManualResetEvent来实现一个暂停功能,并给出其相关的范例。
效果图如下所示:
初始状态
暂停状态
取消状态
关于backgroundworker运作的已有原理此处不再赘述,又想详细了解的请看MSDN范例:http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker(v=vs.110).aspx
在此基础上的暂停功能原理简述:ManualResetEvent类可以实现“通知一个或者多个正在等待 的线程已发生的事件。 ”的功能。
具体代码如下所示:
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 BackGroundWorker { public partial class Form1 : Form { public Form1() { InitializeComponent(); } BackgroundWorker bgWorker = null; private ManualResetEvent manualReset = new ManualResetEvent(true); private void InitiateBgWorker() { bgWorker = new BackgroundWorker(); bgWorker.WorkerReportsProgress = true; bgWorker.WorkerSupportsCancellation = true; bgWorker.DoWork+=new DoWorkEventHandler(bgWorker_DoWork); bgWorker.RunWorkerCompleted+=new RunWorkerCompletedEventHandler(bgWorker_RunWorkerCompleted); bgWorker.ProgressChanged+=new ProgressChangedEventHandler(bgWorker_ProgressChanged); } private void bgWorker_DoWork(object send,DoWorkEventArgs e) { for (int i = 0; i < 100; i++) { if(bgWorker.CancellationPending)//如果用户申请了取消曹组 { for (int k = i; k >= 0; k--) { Thread.Sleep(10); bgWorker .ReportProgress(k);//模拟一个回滚的效果 } e.Cancel = true; return;//跳出操作123 } //操作1 //操作2 //操作3 manualReset.WaitOne();//如果ManualResetEvent的初始化为终止状态(true),那么该方法将一直工作,直到收到Reset信号。然后,直到收到Set信号,就继续工作。 //反之亦然 Thread.Sleep(500); bgWorker.ReportProgress(i + 1); } } private void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { progressBar1.Value = http://www.mamicode.com/e.ProgressPercentage;>
完整代码包下载地址(含winform):http://download.csdn.net/detail/fanrong1985/8135959支持取消操作和暂停操作的Backgroundworker示例一则
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。