关于C#进度条 假设我有十个文件需要去分析,当传递给我一个消息告诉我要开始分析的时候,我需要刷新一下进度条,当完成一个文件的分析时进度条完成1/10...当十个文件都完成时又会传递给我一个完成的消息,进度条完成100%,如何用一个方法来实现,求大神帮忙,在线等待C#进度条 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用backgroundworker会方便很多,拖一个backgroundworker到界面和一个进度条,按钮点击开始处理文件void startOpFile(){ if(backgroundworker.isbusy) return; backgroundWorker.RunWorkerAsync(你的文件个数);}//backgroundworker的事件都要用上 private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { KeyValuePair<int,string> record = (KeyValuePair<int,string>) e.UserState ; label.Text = string.Format("{0}", record.Key+"="+(((double)record.Key / (double)你文件的个数)).ToString("P3")); label.Update(); progressBarLeft.Value = e.ProgressPercentage;//进度条 progressBarLeft.Update(); }private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { try { e.Result = this.RetrieveData(this.backgroundWorker, e); } catch (Exception ex) { MessageBox.Show(ex.Message); throw; } }private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { try { label.Text = string.Format("总记录: {0}", e.Result); } catch (TargetInvocationException ex) { MessageBox.Show(ex.InnerException.GetType().ToString()); } }//主要是写这么一个方法返回处理的值 private int RetrieveData(BackgroundWorker worker, DoWorkEventArgs e) { int maxRecords = (int)e.Argument; int percent = 0; Application.DoEvents();// for (int i = 1; i <= maxRecords; i++) { if (worker.CancellationPending) { return i; } percent = (int)(((double)i / (double)maxRecords) * 100); worker.ReportProgress(percent, new KeyValuePair<int,string>(i,Guid.NewGuid().ToString())); Thread.Sleep(1000);//模拟测试 } return maxRecords; }大概思路是这样子,LZ你再去摸索下就更加深刻了。哦对了,再加一个是马上终止当前处理的:void stopOp(){backgroundWorker.CancelAsync();} 使用backgroundworker这个组件的,具体实现可以参考这个文章的:http://www.cnblogs.com/zhili/archive/2013/05/11/EAP.html 为什么listview的Items中contains函数返回值不对? 一个datatime的问题 跳到下个对话框后自动关闭已有的对话框 关于数据库的一点问题 简单计算textbox中的字符数 float转string 默认按钮,取消按钮 100分,为什么Replace替换过程会假死机? 字符串的输出格式问题 多线程的问题,好多天了还没解决,郁闷惨了,:(!! C# WPF 中 PasswordBox 怎样将光标设定在某个位置 比如 最后 c#操作PDF 如何实现,求高手关注
void startOpFile()
{
if(backgroundworker.isbusy) return;
backgroundWorker.RunWorkerAsync(你的文件个数);
}
//backgroundworker的事件都要用上
private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
KeyValuePair<int,string> record = (KeyValuePair<int,string>) e.UserState ;
label.Text = string.Format("{0}", record.Key+"="+(((double)record.Key / (double)你文件的个数)).ToString("P3"));
label.Update();
progressBarLeft.Value = e.ProgressPercentage;//进度条
progressBarLeft.Update();
}
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
try
{
e.Result = this.RetrieveData(this.backgroundWorker, e);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
throw;
}
}private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
try
{
label.Text = string.Format("总记录: {0}", e.Result);
}
catch (TargetInvocationException ex)
{
MessageBox.Show(ex.InnerException.GetType().ToString());
}
}
//主要是写这么一个方法返回处理的值
private int RetrieveData(BackgroundWorker worker, DoWorkEventArgs e)
{
int maxRecords = (int)e.Argument;
int percent = 0;
Application.DoEvents();//
for (int i = 1; i <= maxRecords; i++)
{
if (worker.CancellationPending)
{
return i;
} percent = (int)(((double)i / (double)maxRecords) * 100);
worker.ReportProgress(percent, new KeyValuePair<int,string>(i,Guid.NewGuid().ToString()));
Thread.Sleep(1000);//模拟测试
} return maxRecords;
}大概思路是这样子,LZ你再去摸索下就更加深刻了。
哦对了,再加一个是马上终止当前处理的:
void stopOp()
{
backgroundWorker.CancelAsync();
}