C# winform进度条 (异步)
进度条页面:
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进度条 (异步)的更多相关文章
- 通过XmlHttpRequest实现带进度条异步下载文件
本博文源自技术群的讨论,因为网上找不到实现这样效果的的代码,而我说没问题,可以实现,因此有人质疑我是否能做到,呵呵,现将我实现代码贴出如下,希望有兴趣的同学可以继续完善: 本代码仅做技术展现,请勿探讨 ...
- WinForm 进度条
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Android有进度条异步任务下载图片
首先在AndroidMainifest中添加上网权限 ? 1 <uses-permission android:name="android.permission.INTERNET&qu ...
- winform进度条
参考资料: http://www.cnblogs.com/zzy0471/archive/2010/12/12/1903602.html http://www.cnblogs.com/haogj/ar ...
- Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条
Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条 异步任务相信大家应该不会陌生,那么本章内容MOMO将带领大家学习Unity中的一些异步任务.在同步加载游戏场景的时候通常会使用方法 Ap ...
- winform异步进度条LongTime
winform异步进度条LongTime,运用到回调函数 定义事件的参数类: namespace LongTime.Business { // 定义事件的参数类 public class ValueE ...
- WinForm中异步加载数据并使用进度条
在WinForm程序中,有时会因为加载大量数据导致UI界面假死,这种情况对于用户来说是非常不友好的.因此,在加载大量数据的情况下,首先应该将数据加载放在另一线程中进行,这样保证了UI界面的响应:其次可 ...
- WinForm中使用BackgroundWorker异步加载数据并使用进度条
在WinForm程序中,有时会因为加载大量数据导致UI界面假死,这种情况对于用户来说是非常不友好的.因此,在加载大量数据的情况下,首先应该将数据加载放在另一线程中进行,这样保证了UI界面的响应:其次可 ...
- JS -- 异步加载进度条
今天在博客园问答里面看到博友问道怎么实现Ajax异步加载产生进度条. 很好奇就自己写了一个. 展现效果: 1) 当点击Load的时候,模拟执行异步加载. 浏览器被遮挡. 进度条出现. 实现思路: 1. ...
随机推荐
- Mysql配置参数sync_binlog说明
Mysql配置参数sync_binlog说明 mysql> select version(); +-----------+ | version() | +-----------+ | | +-- ...
- 修改Linux终端提示符颜色
修改Linux终端提示符颜色 作者:Eric 微信:loveoracle11g [root@linux-node2 ~]# tail -1 .bashrc PS1='[\[\033[1;31m\]\u ...
- ThreadException
在windows窗体程序中,使用 ThreadException 事件来处理 UI 线程异常,使用 UnhandledException 事件来处理非 UI 线程异常.ThreadException可 ...
- C# SetParent将其他程序嵌入自己的程序
模块化的开发,将模块合并到一起的时候,遇到了Mdi不能添加到其它窗口下的问题. 分两种情况: 将mdi窗口A设成普通窗口B的子控件,需要将A的TopLevel设置成false,但是Mdi窗口的TopL ...
- 评委打分系统最新版,采用Flash展示双屏技术,望大家测试,多提意见.
最新版结合应用了 Flash展示技术,PPT展示技术,移动端云打分技术等. 详细视频见土豆视频:http://www.tudou.com/programs/view/NUN2lUzkPRI 放大查看上 ...
- python-单元测试unittest
目录: 1.unittest.TestCase中常用的断言方法 1.1 subTest子测试 1.2 套件测试 1.3 批量测试单个用例 2. 加载器 2.1加载器协议 2.2.执行器 TestRun ...
- vmware三种网络模式:桥接模式|仅主机|NAT模式
VMware 网络模式 1. Bridged(桥接)桥接模式下,宿主机物理网卡(主机网卡)和虚拟网卡通过 VMnet0 虚拟交换机进行桥接,物理网卡和虚拟网卡在拓扑图上处于同等地位,物理网卡和虚拟网卡 ...
- 42.scrapy爬取数据入库mongodb
scrapy爬虫采集数据存入mongodb采集效果如图: 1.首先开启服务切换到mongodb的bin目录下 命令:mongod --dbpath e:\data\db 另开黑窗口 命令:mongo. ...
- Oracle表复杂查询
转自:https://www.cnblogs.com/w-gao/p/7288293.html Oracle表复杂查询 聚合函数 max(字段值) -- 求最大值 min(字段值) -- 求最小值 ...
- https://www.52pojie.cn/thread-688820-1-1.html
https://www.52pojie.cn/thread-688820-1-1.html