简单的说,在一个窗口里有个按钮,按下这个button,是个循环,很长很长的循环,估计得1小时以上举例:
for (i=0;i<=10000000;i++)
{
XXXXXXXXXXXXXXXXXX;
......
}里面的运算比较复杂,所以循环很长时间我想让程序能显示运行到哪一步了,比如能显示一下i这个值,但程序改成:
for (i=0;i<=10000000;i++)
{
label1.Text=i.ToString();
XXXXXXXXXXXXXXXXXX;
......
}并不能随时显示i,而是要等循环全部完成才显示最后一个i值。应该如何做?
for (i=0;i<=10000000;i++)
{
XXXXXXXXXXXXXXXXXX;
......
}里面的运算比较复杂,所以循环很长时间我想让程序能显示运行到哪一步了,比如能显示一下i这个值,但程序改成:
for (i=0;i<=10000000;i++)
{
label1.Text=i.ToString();
XXXXXXXXXXXXXXXXXX;
......
}并不能随时显示i,而是要等循环全部完成才显示最后一个i值。应该如何做?
解决方案 »
- WebRequest相关的操作,如果不调用Close会不会有问题
- C# 调用Delphi DLL
- 用C#做起重机的监测系统-详细版-急求帮助
- 如何在C#的中的“form”显示arcgis和mapgis图片文件(初学者问题)
- c#的web程序启动时,如何默认窗口最大化
- 为什么这样的数据库操作都会出错?求解!!
- 请教一下 C#和VC++.net 有什么区别啊?
- DataView[i][j]=DataView[i][k]赋值报IndexOutOfRangeException异常
- c#的背景图片移动
- 高分求邮件接收完整例子!
- visual studio 2008的C#开发的程序可以在win98运行吗?
- 求一个软件解决方案例子
http://szitr.com/bbs/thread-320-1-1.html
是啊,就是僵住了,本来里面还放了个Timer,用来显示时间的,没想到连Timer都僵住了我是新手,很多还部冻,能不能给个简单的实例?
一秒就好几亿次~Label控件怎么可能跟得上呢.肉眼也看不清啊.
建议用一个进度条.把最大值设为i的最后计算值.这样i++就可以在进度条上显示了
for (i=0;i <=100;i++)
{
XXXXXXXXXXXXXXXXXX;
......
} 只有100次循环,每次循环可能需要半分钟,如果label能显示的话,不会一闪而过吧!
因我是个新手,还希望各位老师在建议启动线程进度的时候,能给个简单实例啊,谢谢
1、从工具箱里拖一个backgroundworker控件进来。修改它的属性WorkerReportProgress为true。
2、放一个button,一个listbox。
3、添加相应的代码如下:
//用以记录产生的时间和数字
class ProcessInfo
{
public int number;
public DateTime time; public ProcessInfo(int number, DateTime time)
{
this.number = number;
this.time = time;
}
} private void button1_Click_1(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
} private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
//产生100个随机数并在产生过程中报告完成百分比,产生的数字和产生的时间
for (int i = 0; i < 100; i++)
backgroundWorker1.ReportProgress(i, new ProcessInfo(new Random().Next(), DateTime.Now));
} private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//接收状态变化信息并提示
ProcessInfo info = e.UserState as ProcessInfo;
listBox1.Items.Add("状态改变。时间:" + info.time.ToString() + "数字:" + info.number.ToString() + ";已完成百分之" + e.ProgressPercentage);
} private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//报告工作完成
listBox1.Items.Add("完成");
}
void f()
{
for (i=0;i <=10000000;i++)
{
label1.Text=i.ToString();
XXXXXXXXXXXXXXXXXX;
......
}
}void Calc()
{
Thread t = new Thread(new ThreadStart(this.f));
t.Start();
}
liqngjun123 的例子也很好,使用比较简单,不过会有调用控件的错误,我查了网上,也有解决的方法。不过这种方法好像还需要一个关闭线程的动作是不是?因为我关闭窗口,运行仍然在进行,一定要停止调试才会结束,呵呵