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, //工作结束 } }