为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

C Sharp 进度条的使用

2011-09-29 20页 doc 210KB 21阅读

用户头像

is_823761

暂无简介

举报
C Sharp 进度条的使用​  ​ huwei12345 ​ (huwei) ​ 等 级: ​  #1楼 得分:0回复于:2010-02-10 11:03:54 造个假的。。。。 大多数都是假的 ​ 对我有用[0] ​ 丢个板砖[0] ​ 引用 ​ 举报 ​ 管理 ​ TOP 精华推荐:【讨论】★★★★★难度!!如何在WINDOWS启动的时候,用户准备输入密码的时候,运行并且显示程序? ​  ​ wxm3630478 ​ (▄︻┻┳═一黑你没商量) ​ 等 级: ​  #2楼 得分:10回复于:2010-02-10 11...
C Sharp 进度条的使用
​  ​ huwei12345 ​ (huwei) ​ 等 级: ​  #1楼 得分:0回复于:2010-02-10 11:03:54 造个假的。。。。 大多数都是假的 ​ 对我有用[0] ​ 丢个板砖[0] ​ 引用 ​ 举报 ​ 管理 ​ TOP 精华推荐:【讨论】★★★★★难度!!如何在WINDOWS启动的时候,用户准备输入密码的时候,运行并且显示程序? ​  ​ wxm3630478 ​ (▄︻┻┳═一黑你没商量) ​ 等 级: ​  #2楼 得分:10回复于:2010-02-10 11:07:53 C# code //一个模拟.....也可能不适合你,不知道你的发送文件代码是怎么写的 private void button3_Click(object sender, EventArgs e) { Thread thread = new Thread(new ThreadStart(Send)); thread.Start(); } private void Send() { int i = 0; while (i <= 100) { //显示进度 信息 this.ShowPro(i); //循环发生文件 //模拟的 i++; //模拟发送多少 Thread.Sleep(100); } Thread.CurrentThread.Abort(); } private void ShowPro(int value) { if (this.InvokeRequired) { this.Invoke(new ProgressBarShow(ShowPro), value); } else { this.progressBar1.Value = value; this.label1.Text = value + "%"; } } ​ 对我有用[0] ​ 丢个板砖[0] ​ 引用 ​ 举报 ​ 管理 ​ TOP 精华推荐:[攒分贴]每日小知识 ​  ​ zhaojunv3z810 ​ (zhaojunv3z810) ​ 等 级: ​  #3楼 得分:0回复于:2010-02-10 11:27:36 引用 2 楼 wxm3630478 的回复: C# code//一个模拟.....也可能不适合你,不知道你的发送文件代码是怎么写的privatevoid button3_Click(object sender, EventArgs e) { Thread thread=new Thread(new ThreadStart(Send)); thread.Start(); }privatevoid Send() {int i=0;while (i<=100) {//显示进度 信息this.ShowPro(i);//循环发生文件//模拟的 i++;//模拟发送多少 Thread.Sleep(100); } Thread.CurrentThread.Abort(); }privatevoid ShowPro(int value) {if (this.InvokeRequired) {this.Invoke(new ProgressBarShow(ShowPro), value); }else {this.progressBar1.Value= value;this.label1.Text= value+"%"; } } wxm3630478:谢谢你的好代码 另:听说可以用onPaint()函数,有这方面的sample吗 ​ 对我有用[0] ​ 丢个板砖[0] ​ 引用 ​ 举报 ​ 管理 ​ TOP 精华推荐:请大家说说Linq的缺点 ​  ​ castlooo ​ (拼命三郎) ​ 等 级: ​  #4楼 得分:0回复于:2010-02-10 13:01:23 上传的时候 分段上传,每上传一段,进度条走一段,呵呵 ​ 对我有用[0] ​ 丢个板砖[0] ​ 引用 ​ 举报 ​ 管理 ​ TOP 精华推荐:如何做到让程序自学习,让程序有点思维呢 ​  ​ flyerwing ​ (80年代的内裤) ​ 等 级: ​  #5楼 得分:0回复于:2010-02-10 13:06:16 这得看楼猪使用时的具体情况了 ​ 对我有用[0] ​ 丢个板砖[0] ​ 引用 ​ 举报 ​ 管理 ​ TOP 精华推荐:【送帖最后公告】活动结束,书已发出,1月7日前基本可收到,请注意查收 ​  ​ mervyn807 ​ (梦幻舞天姬) ​ 等 级: ​  #6楼 得分:0回复于:2010-02-10 13:11:27 文件大小是进度条的总量 计算已经发送的量不就好了 ​ 对我有用[0] ​ 丢个板砖[0] ​ 引用 ​ 举报 ​ 管理 ​ TOP ​  ​ zhaojunv3z810 ​ (zhaojunv3z810) ​ 等 级: ​  #7楼 得分:0回复于:2010-02-10 13:27:27 引用 4 楼 castlooo 的回复: 上传的时候 分段上传,每上传一段,进度条走一段,呵呵 Good idea!! ​ 对我有用[0] ​ 丢个板砖[0] ​ 引用 ​ 举报 ​ 管理 ​ TOP ​  ​ zhaojunv3z810 ​ (zhaojunv3z810) ​ 等 级: ​  #8楼 得分:0回复于:2010-02-10 13:34:16 引用 6 楼 mervyn807 的回复: 文件大小是进度条的总量 计算已经发送的量不就好了 一个文件的情况下:我怎么在上传的过程中知道已上传的size呢? ​ 对我有用[0] ​ 丢个板砖[0] ​ 引用 ​ 举报 ​ 管理 ​ TOP ​  ​ wxm3630478 ​ (▄︻┻┳═一黑你没商量) ​ 等 级: ​  #9楼 得分:0回复于:2010-02-10 13:58:23 把文件转换成byte[] ​ 对我有用[0] ​ 丢个板砖[0] ​ 引用 ​ 举报 ​ 管理 ​ TOP ​  ​ whb147 ​ (苦乐随缘) ​ 等 级: ​  #10楼 得分:0回复于:2010-02-10 14:38:28 用一个委托 文件的大小就是进度条的总长度 然后上传的时候,根据上传的大小修改进度条的长度(此地加事件) 在外面订阅上面的事件 ​ 对我有用[0] ​ 丢个板砖[0] ​ 引用 ​ 举报 ​ 管理 ​ TOP ​  ​ duwa789 ​ (这家伙很懒,什么也没留下) ​ 等 级: ​  #11楼 得分:0回复于:2010-02-10 14:41:40 PS:用BackgroundWorker避免无响应 ​ 对我有用[0] ​ 丢个板砖[0] ​ 引用 ​ 举报 ​ 管理 ​ TOP ​  ​ whb147 ​ (苦乐随缘) ​ 等 级: ​  #12楼 得分:10回复于:2010-02-10 21:32:49 前几天刚用过,修改了一下,参考了一位前辈的例子 http://blog.mylover.cn/2009/02/post-3.html C# code 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; namespace TestProgressBar { public partial class TestForm : Form { //线程开始的时候调用的委托 private delegate void maxValueDelegate(WordEventArgs e); //线程执行中调用的委托 private delegate void nowValueDelegate(WordEventArgs e); //线程执行结束调用的委托 private delegate void endValueDelegate(WordEventArgs e); public TestForm() { InitializeComponent(); } private void btn_Test_Click(object sender, EventArgs e) { Worker worker = new Worker(); /// 订阅事件 worker.OnStartWorkEvent += new WorkEventHandler(this.OnStartWorkEventHandler); worker.OnDoWorkEvent += new WorkEventHandler(this.OnDoWorkEventHandler); worker.OnEndWorkEvent += new WorkEventHandler(this.OnEndWorkEventHandler); Thread thread = new Thread(new ThreadStart(worker.Work)); thread.Start(); } /// /// 线程开始事件,设置进度条最大值,需要一个委托来替我完成 /// /// /// void OnStartWorkEventHandler(object sender, WordEventArgs e) { maxValueDelegate max = new maxValueDelegate(SetMaxValue); this.Invoke(max, e); } /// /// 线程执行中的事件,设置进度条当前进度,需要一个委托来替我完成 /// /// /// void OnDoWorkEventHandler(object sender, WordEventArgs e) { nowValueDelegate now = new nowValueDelegate(SetNowValue); this.Invoke(now, e); } /// /// 线程完成事件 /// /// /// void OnEndWorkEventHandler(object sender, WordEventArgs e) { endValueDelegate end = new endValueDelegate(SetEndValue); this.Invoke(end, e); } /// /// 被委托调用,专门设置进度条最大值的 /// /// private void SetMaxValue(WordEventArgs e) { this.probar_Test.Maximum = e.Position; lbl_Info.Text = e.Info; } /// /// 被委托调用,专门设置进度条当前值的 /// /// private void SetNowValue(WordEventArgs e) { this.probar_Test.Value = e.Position; lbl_Info.Text = e.Info; } /// /// 被委托调用,专门设置进度条结束后的处理 /// /// private void SetEndValue(WordEventArgs e) { this.probar_Test.Value = e.Position; ; lbl_Info.Text = e.Info; MessageBox.Show(e.Info); } } } C# code using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace TestProgressBar { public delegate void WorkEventHandler(object sender, WordEventArgs e); class Worker { /// /// 开始事件 /// public event WorkEventHandler OnStartWorkEvent; /// /// 执行时事件 /// public event WorkEventHandler OnDoWorkEvent; /// /// 结束事件 /// public event WorkEventHandler OnEndWorkEvent; public Worker() { } private void SendEvents(WordEventArgs e) { switch (e.Stage) { case WorkStage.BeginWork: if (OnStartWorkEvent != null) OnStartWorkEvent(this, e); break; case WorkStage.DoWork: if (OnDoWorkEvent != null) OnDoWorkEvent(this, e); break; case WorkStage.EndWork: if (OnEndWorkEvent != null) OnEndWorkEvent(this, e); break; default: if (OnDoWorkEvent != null) OnDoWorkEvent(this, e); break; } } public void Work() { int iTotal = 100;//计算工作量,这里是设置为100,如果是上传,或者下载,就是文件的大小,循环遍历的话,这就是最大的那个循环数 SendEvents(new WordEventArgs(WorkStage.BeginWork, "开始工作!", iTotal)); int iCount = 0; for (int i = 0; i < iTotal; i++) { Thread.Sleep(50);//休息50毫秒,模拟执行大数据量操作, iCount = i; // 此处计算所处的位置,如果是上传或者下载了多少了, SendEvents(new WordEventArgs(WorkStage.DoWork, "正在工作ing " + iCount.ToString(), iCount)); } SendEvents(new WordEventArgs(WorkStage.EndWork, "结束工作!", iTotal)); } } class WordEventArgs : EventArgs { //主要是用来往外传递信息的 public WorkStage Stage; public string Info = ""; public int Position = 0; public WordEventArgs(WorkStage Stage, string Info, int Position) { this.Stage = Stage; this.Info = Info; this.Position = Position; } } public enum WorkStage { BeginWork, //准备工作 DoWork, //正在工作 EndWork, //工作结束 } }
/
本文档为【C Sharp 进度条的使用】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索