关于C# WinForm中进度条的实现方法
来源:互联网 发布:刚转行做程序员后悔了 编辑:程序博客网 时间:2024/04/27 14:37
http://www.cnblogs.com/Sue_/articles/2024932.html
进度条是一个软件人性化考虑之一,他给用户的感觉就是程序内部在不停的动作,执行到了什么程度,而不是整个界面僵死,以至于用户不知道程序在做什么!
看了好几个WinForm程序了,发现他们对进度条的处理完全失去了进度条的作用。他们都是采用Timer来处理,在线程结束的时候,直接赋值进度条达到100%。和我以前做WebForm程序的时候完全不一样,做WebForm程序的时候,进度条是根据总体数据和每步执行后而计算和更新的。在看了这几个WinForm程序后,我在想:是否所有WinForm程序,在进度条的处理上都不能保证实时进度显示?
其实用Timer来处理,不停的更新进度条只是程序作者偷懒的方法。当然这样的好处就是可以简单化处理进度条,代码量少,不易出错,调试方便。
还有一种方法,就是可以及时更新进度条的数据的。那就是采用事件驱动机制,在子线程中监视复杂处理过程中的设定的事件,及时更新!直接看代码:
程序代码using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace WindowsApplication1
{
/// <summary>
/// Form1 类
/// </summary>
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//用子线程工作
new System.Threading.Thread(new System.Threading.ThreadStart(StartDownload)).Start();
}
//开始下载
public void StartDownload()
{
Downloader downloader = new Downloader();
downloader.onDownLoadProgress += new Downloader.dDownloadProgress(downloader_onDownLoadProgress);
downloader.Start();
}
//同步更新UI
void downloader_onDownLoadProgress(long total, long current)
{
if (this.InvokeRequired)
{
this.Invoke(new Downloader.dDownloadProgress(downloader_onDownLoadProgress), new object[] { total, current });
}
else
{
this.progressBar1.Maximum = (int)total;
this.progressBar1.Value = (int)current;
}
}
}
/// <summary>
/// 下载类(您的复杂处理类)
/// </summary>
public class Downloader
{
//委托
public delegate void dDownloadProgress(long total,long current);
//事件
public event dDownloadProgress onDownLoadProgress;
//开始模拟工作
public void Start()
{
for (int i = 0; i < 100; i++)
{
if (onDownLoadProgress != null)
onDownLoadProgress(100, i);
System.Threading.Thread.Sleep(100);
}
}
}
}
- 关于C# WinForm中进度条的实现方法
- 关于C# WinForm中进度条的实现方法
- 关于C# WinForm中进度条的实现方法
- C# WinForm中进度条的实现方法
- 关于C#Winform中进度条的实现方法
- C# winform进度条实现
- Winform进度条的实现
- C# WinForm中实现MessageBox.Show()的常用方法
- C#中关于TreeView的WinForm编程
- C# WinForm国际化实现的简单方法
- C# Winform中绘制动画的方法
- C# WINFORM中嵌入FLASH的方法
- C# WINFORM中嵌入FLASH的方法
- C# winform带进度条的图片下载
- C# winform带进度条的图片下载
- winForm中C#实现Excel的导出
- C#中Winform淡入淡出的实现
- winform:C# WinForm中实现基于角色的权限菜单
- 【java编程】Map集合之HashMap--KeySet和EntrySet的两种取出方式
- LocalBroadcastManager的使用
- 【基础篇系列2】java之语法基础篇
- HDU 4547 CD操作(LCA + BFS)
- spark-sql shell 脚本配置,稍后补充
- 关于C# WinForm中进度条的实现方法
- 最短路径—Dijkstra算法和Floyd算法
- Android 自定义控件的使用
- (对错自己悟哦~)2014暴风影音笔试题
- Sonar——代码质量管理平台
- 设计模式——观察者
- JS----多态
- 离职一年后的反思
- WEB架构师成长之路