后台代码:

 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; namespace winform
{
public partial class fm : Form
{
BackgroundWorker worker;
public fm()
{
InitializeComponent();
worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
worker.WorkerSupportsCancellation = true;
//正式做事情的地方
worker.DoWork += new DoWorkEventHandler(DoWork);
//任务完称时要做的,比如提示等等
worker.ProgressChanged += new ProgressChangedEventHandler(ProgessChanged);
//任务进行时,报告进度
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(RunWorkerCompleted);
progressBar1.Maximum = ;
}
//调用 RunWorkerAsync 时发生
public void DoWork(object sender, DoWorkEventArgs e)
{
e.Result = ComputeFibonacci(worker, e); //获取异步操作结果的值,当ComputeFibonacci(worker, e)返回时,异步过程结束
} //调用 ReportProgress 时发生
public void ProgessChanged(object sender, ProgressChangedEventArgs e)
{
this.progressBar1.Value = e.ProgressPercentage;
//将异步任务进度的百分比赋给进度条
int value = int.Parse(e.UserState.ToString());
if (value % == )
textBox1.Text += "\r\n" + value;
else
textBox1.Text += "-" + value;
label1.Text = string.Format("完成{0}%", (value + ) * / progressBar1.Maximum);
} //当后台操作已完成、被取消或引发异常时发生
public void RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled)
MessageBox.Show("取消了");
else
MessageBox.Show("完成!" + e.Result);
} private int ComputeFibonacci(object sender, DoWorkEventArgs e)
{ for (int i = ; i < ; i++)
{
//判断应用程序是否取消后台操作
if (worker.CancellationPending)
{
e.Cancel = true;
break;
}
//dowork function
worker.ReportProgress(i, i);
System.Threading.Thread.Sleep();
}
return -;
}
private void btnStart_Click(object sender, EventArgs e)
{
if (worker.IsBusy)
{
MessageBox.Show("已经执行异步操作");
return;
}
textBox1.Text = "";
label1.Text = "";
worker.RunWorkerAsync(); btnStart.Enabled = false; btnPause.Enabled = true;
} private void btnPause_Click(object sender, EventArgs e)
{
btnPause.Enabled = false; btnStart.Enabled = true; worker.CancelAsync();
}
}
}

页面效果:

BackgroundWorker学习的更多相关文章

  1. BackgroundWorker学习笔记

    1 简介 BackgroundWorker 类允许您在单独的专用线程上运行操作. 耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态. 如果您需要能进行响 ...

  2. C# BackgroundWorker组件学习入门介绍

    C# BackgroundWorker组件学习入门介绍 一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用BackgroundWorker来完成这一功能 ...

  3. BackgroundWorker组件学习

    今天看到别人的博客中提到了BackgroundWorker组件.在现在的系统中有见到过这个组件,由于实际应用的系统中逻辑比较复杂所以也没深入去看.今天凑巧看到了一个关于BackgroundWorker ...

  4. C# BackgroundWorker组件学习

    C# BackgroundWorker组件学习  C# BackgroundWorker组件学习 一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用Ba ...

  5. thread学习笔记--BackgroundWorker 类

    背景: 在 WinForms 中,有时要执行耗时的操作,比如统计某个磁盘分区的文件夹或者文件数目,如果分区很大或者文件过多的话,处理不好就会造成“假死”的情况,或者报“线程间操作无效”的异常,或者在该 ...

  6. 多线程学习笔记(三) BackgroundWorker 暂停/继续

    BackgroundWorker bw; private ManualResetEvent manualReset = new ManualResetEvent(true); private void ...

  7. 多线程学习笔记(二) BackgroundWorker 和 ProgressChanged

    BackgroundWorker是在内部使用了线程池的技术:同时,在Winform 或WPF编码中,它还给工作线程和UI线程提供了交互的能力. Thread和ThreadPool默认都没有提供这种交互 ...

  8. 阅读《LEARNING HARD C#学习笔记》知识点总结与摘要五

    本篇文章主要是总结异步编程的知识点,也是本系列的最后一篇文章,每一个知识点我都有写出示例代码,方便大家理解,若发现有误或不足之处还请指出,由于书中作者对此知识点讲解过于简单,所以在写这篇文章时本人参考 ...

  9. Lucene.net入门学习(结合盘古分词)

    Lucene简介 Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整 ...

随机推荐

  1. volatile关键字和mutable关键字

    如果不用volatile关键字会如何?可能会造成一个后果就是:编译器发现你多次使用同一个变量的值,然后它可能会假设这个变量是不变的值,并且把这个变量的值放入寄存器中,方便下一次使用,提高存取速度. 一 ...

  2. 基于Bayes和KNN的newsgroup 18828文本分类器的Python实现

    向@yangliuy大牛学习NLP,这篇博客是数据挖掘-基于贝叶斯算法及KNN算法的newsgroup18828文本分类器的JAVA实现(上)的Python实现.入门为主,没有太多自己的东西. 1. ...

  3. Ubuntu 16.04 软件中心闪退 解决方案

    最近使用16.04不知道是哪里出了问题,软件中心打不开了,点击图标之后完全不显示GUI,过一会儿软件就自动关闭了,然后也没有报错的log. 虽然可以使用命令行升级,但是强迫症不能忍啊. 经过一番折腾, ...

  4. KinerCode.js

    1 /*验证码*/ function KinerCode(options) { this.opt = this.extend(true, this.options, options); this.op ...

  5. HTTP请求方法

    HTTP请求方法 根据HTTP标准,HTTP请求可以使用多种请求方法. HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法. HTTP1.1新增了五种请求方法:OPTIONS, ...

  6. Cisco ASA 配置案例---anyconnect拨通后所有流量从服务器端出去

    一.目的: 1.Cisco ASA之Lan端能正常上网. 2.anyconnect端所有流量从Cisco ASA的Outside出去. 3.anyconnect端能访问Cisco ASA的Inside ...

  7. appium+Python真机运行测试demo的方法

    appium+Python真机运行测试demo的方法 一,    打开手机的USB调试模式 二,    连接手机到电脑 将手机用数据线连接到电脑,并授权USB调试模式.查看连接的效果,在cmd下运行命 ...

  8. Centeros7 环境相关问题

    服务处理命令 systemctl start mariadb #启动MariaDB systemctl stop mariadb #停止MariaDB systemctl restart mariad ...

  9. 上下文管理、线程池、redis订阅和发布

    一:上下文管理: 对于一些对象在使用之后,需要关闭操作的.比如说:socket.mysql数据库连接.文件句柄等. 都可以用上下文来管理. 语法结构: Typical usage: @contextm ...

  10. 【HTML5】canvas画布练习

    第一步:获取画布元素 var canvas = document.getElementById("myCanvas"); var context = canvas.getConte ...