进度条页面:

http://www.cnblogs.com/Deckard/archive/2009/06/24/1510451.html

//===============================================================================
// Microsoft patterns & practices
// CompositeUI Application Block
//===============================================================================
// Copyright ?Microsoft Corporation.  All rights reserved.
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT
// LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
// FITNESS FOR A PARTICULAR PURPOSE.
//===============================================================================

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

namespace BackgroudWokerUI
{
    public partial class ProgressForm : Form
    {
        public ProgressForm()
        {
            InitializeComponent();
        }

//工作完成后执行的事件
        public void OnProcessCompleted(object sender, EventArgs e)
        {
            this.Close();
        }

//工作中执行进度更新
        public void OnProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressWork.Value = e.ProgressPercentage;
        }

private void btnClose_Click(object sender, EventArgs e)
        {
            Close();
        }
    }
}

主页面:

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

//Note You must be careful not to manipulate any user-interface objects
//in your System.ComponentModel.BackgroundWorker.DoWork event handler.
//Instead, communicate to the user interface through the
//System.ComponentModel.BackgroundWorker.ProgressChanged and
//System.ComponentModel.BackgroundWorker.RunWorkerCompleted events.

namespace BackgroudWokerUI
{
    public partial class MainForm : Form
    {
        //BindingList is useful list for UI
        private IList<string> leftList = new BindingList<string>();
        private IList<string> rightList = new BindingList<string>();

private BackgroundWorker worker = null;

public MainForm()
        {
            InitializeComponent();
            //Databinding here
            listBox1.DataSource = leftList;
            listBox2.DataSource = rightList;
        }

private void addButton_Click(object sender, EventArgs e)
        {
            if (textBox.Text.Length != 0)
            {
                leftList.Add(textBox.Text);
                textBox.Text = "";
                textBox.Focus();
            }
        }

private void moveButton_Click(object sender, EventArgs e)
        {
            //显示进度条
            ProgressForm progressForm = new ProgressForm();
            progressForm.Show();

// Prepare the background worker for asynchronous prime number calculation
            //准备进度条的记数
            worker= new BackgroundWorker();
            // Specify that the background worker provides progress notifications 
            //指定提供进度通知
            worker.WorkerReportsProgress = true;
            // Specify that the background worker supports cancellation
            //提供中断功能
            worker.WorkerSupportsCancellation = true;
            // The DoWork event handler is the main work function of the background thread
            //线程的主要功能是处理事件
            //开启线程执行工作
            worker.DoWork += new DoWorkEventHandler(worker_DoWork);
            // Specify the function to use to handle progress
            //指定使用的功能来处理进度
            worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);
            worker.ProgressChanged += new ProgressChangedEventHandler(progressForm.OnProgressChanged);
            // Specify the function to run when the background worker finishes
            // There are three conditions possible that should be handled in this function:
            // 1. The work completed successfully
            // 2. The work aborted with errors
            // 3. The user cancelled the process
            //进度条结束完成工作
            //1.工作完成
            //2.工作错误异常
            //3.取消工作
            worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
            worker.RunWorkerCompleted+=new RunWorkerCompletedEventHandler(progressForm.OnProcessCompleted);
                
            //If your background operation requires a parameter,
            //call System.ComponentModel.BackgroundWorker.RunWorkerAsync
            //with your parameter. Inside the System.ComponentModel.BackgroundWorker.DoWork
            //event handler, you can extract the parameter from the
            //System.ComponentModel.DoWorkEventArgs.Argument property.
            //如果进度条需要参数
            //调用System.ComponentModel.BackgroundWorker.RunWorkerAsync
            //传入你的参数至System.ComponentModel.BackgroundWorker.DoWork
            //提取参数
            //System.ComponentModel.DoWorkEventArgs.Argument
            worker.RunWorkerAsync(leftList);
        }

//单线程执行工作
        private void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            MoveList((BackgroundWorker)sender,e);
        }

//进行转移工作
        private void MoveList(BackgroundWorker worker,DoWorkEventArgs e)
        {
            IList<string> list = e.Argument as IList<string>;

for (int i = 0; i < list.Count; i++)
            {
                // Check for cancellation
                //检查取消
                if (worker.CancellationPending)
                {
                    e.Cancel = true;
                    break;
                }
                else
                {
                    // This will be handled in the correct thread thanks to the
                    // internals of BackgroundWroker and AsyncOperation
                    worker.ReportProgress((i + 1) * (100 / list.Count), list[i]);
                    // Simulate some time consuming proccess.
                    //线程休眠
                    Thread.Sleep(500);
                }
            }
        }
        //添加数据至右边listBox
        private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            //Add string to the right listBox
            rightList.Add(e.UserState as string);
        }

//工作完成状态
        private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Cancelled)
            {
                label.Text = "Cancelled!取消";
            }
            else if (e.Error != null)
            {
                label.Text = "Error!异常";
            }
            else
            {
                label.Text = "Success!完成";
                leftList.Clear();
            }
        }
        //取消中
        private void cancelButton_Click(object sender, EventArgs e)
        {
            if (worker.IsBusy)
            {
                label.Text = "Cancelling...";
                //挂起进程
                worker.CancelAsync();
            }
        }
        //返回操作
        private void moveBackButton_Click(object sender, EventArgs e)
        {
            foreach (string str in rightList)
            {
                leftList.Add(str);
            }
            rightList.Clear();
        }
    }
}

C# winform进度条 (异步)的更多相关文章

  1. 通过XmlHttpRequest实现带进度条异步下载文件

    本博文源自技术群的讨论,因为网上找不到实现这样效果的的代码,而我说没问题,可以实现,因此有人质疑我是否能做到,呵呵,现将我实现代码贴出如下,希望有兴趣的同学可以继续完善: 本代码仅做技术展现,请勿探讨 ...

  2. WinForm 进度条

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  3. Android有进度条异步任务下载图片

    首先在AndroidMainifest中添加上网权限 ? 1 <uses-permission android:name="android.permission.INTERNET&qu ...

  4. winform进度条

    参考资料: http://www.cnblogs.com/zzy0471/archive/2010/12/12/1903602.html http://www.cnblogs.com/haogj/ar ...

  5. Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条

    Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条 异步任务相信大家应该不会陌生,那么本章内容MOMO将带领大家学习Unity中的一些异步任务.在同步加载游戏场景的时候通常会使用方法 Ap ...

  6. winform异步进度条LongTime

    winform异步进度条LongTime,运用到回调函数 定义事件的参数类: namespace LongTime.Business { // 定义事件的参数类 public class ValueE ...

  7. WinForm中异步加载数据并使用进度条

    在WinForm程序中,有时会因为加载大量数据导致UI界面假死,这种情况对于用户来说是非常不友好的.因此,在加载大量数据的情况下,首先应该将数据加载放在另一线程中进行,这样保证了UI界面的响应:其次可 ...

  8. WinForm中使用BackgroundWorker异步加载数据并使用进度条

    在WinForm程序中,有时会因为加载大量数据导致UI界面假死,这种情况对于用户来说是非常不友好的.因此,在加载大量数据的情况下,首先应该将数据加载放在另一线程中进行,这样保证了UI界面的响应:其次可 ...

  9. JS -- 异步加载进度条

    今天在博客园问答里面看到博友问道怎么实现Ajax异步加载产生进度条. 很好奇就自己写了一个. 展现效果: 1) 当点击Load的时候,模拟执行异步加载. 浏览器被遮挡. 进度条出现. 实现思路: 1. ...

随机推荐

  1. 01-配置java开发环境

    JDK 1.8软件下载地址 (Oracle公司的官方网站) http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads ...

  2. python装饰器1

    目的:在不修改原来函数代码的前提下,使用这个功能,可以使得之后这个函数被调用时增加额外的功能. #2.定义装饰器 def deco (fun): print "i am deco,i can ...

  3. Python的可迭代对象、迭代器和生成器

    可迭代对象(Iterable) 这些可以直接作用于for循环的对象统称为可迭代对象:Iterable. 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.t ...

  4. Docker 系列01: Centos7.3 上安装docker

    Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE. 社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施.容器 ...

  5. DQL完整语法及示例

    DQL:Data Query Language,数据查询语言,其实它也是DML(数据库操作语言的一种),下面看一看完整的语法: 注意,关键字建议大写,不带[ ]是必需的,带[ ]是可选的. SELEC ...

  6. linux设置服务器时间同步

    yum install -y rdate 服务器请设置 */5 * * * * /usr/bin/rdate -s time-b.nist.gov ubuntu 设定时区:dpkg-reconfigu ...

  7. c# Color 颜色设置

    #region 笔刷颜色 public SolidColorBrush col(byte a, byte r, byte g, byte b) { #region 颜色说明 //Color.FromA ...

  8. Js中,Map对象的使用

    1.定义 键/值对的集合. 2.语法 mapObj = new Map() 3.备注 集合中的键和值可以是任何类型.如果使用现有密钥向集合添加值,则新值会替换旧值. 4.属性 构造函数 :指定创建映射 ...

  9. python中的type

    我们常用type()来查看类型,使用方法如下: 1 a = "zzzq" 2 b = 1 3 c = (1, "zzq123") 4 d = [2, " ...

  10. 【3-28】javascript简介及语法

    一.简介 (一)定义:JavaScript是一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型,需有宿主文件:html文件. (二)作用:1.进行数据运算 2.对浏览器事件作出响 ...