一个按钮中,
for (int i = 0; i < 1000; i++)
{
Console.WriteLine(i);
Thread.Sleep(100);
this.Text = string.Format("{0}/{1}",i,1000);
}如果这样写程序会卡死,请问,怎么更新进度,谢谢.
for (int i = 0; i < 1000; i++)
{
Console.WriteLine(i);
Thread.Sleep(100);
this.Text = string.Format("{0}/{1}",i,1000);
}如果这样写程序会卡死,请问,怎么更新进度,谢谢.
解决方案 »
- 如何让程序延迟几分钟在执行??
- 如何判断datagrideview的列绑定的字段的类型
- C#中继承类中的关键字new和override的疑问
- 特特急????异常详细信息: System.InvalidOperationException: ExecuteReader 要求已打开且可用的连接。连接的当前状态为已关闭。????
- 过滤内容问题(内容库比较大(2000短语左右)),对效率较高(具体看内容)
- 小弟急求怎样来实现打开子窗体的时候父窗体会自动关闭或是自动隐藏
- 画直线时,怎样擦除上次的直线,而不擦除以前的图形
- insert update 语句的编写
- 关于系统异常与高程考试的问题
- 如何解析xml,xml的格式是不规则的。这种如何解析
- C#的chart中,已知X轴的值如何取得曲线 Series的对应Y轴的值?求大神
- c#windows窗体小问题
首先楼主要有线程的概念,你这段代码是在主线程中执行的,同时主线程也是UI线程,这样在这段代码执行完之前主线程是没有机会去刷新UI的。两个办法
1,工作放到主线程之外的线程里面做,然后通过事件,或者轮询的方式更新完成进度。
2,另一种方式就是在主线程里面做,每次循环之后都做一次DoEvents,这样给主线程一个机会去刷新UI。个人推荐第一种方式,因为这才是正规的做法。第二种方式其实是一种偷懒的做法,因为工作还是在主线程里面做,所以在工作结束之前主线程都会繁忙,对于UI来说,这种做法很不好。
http://blog.csdn.net/kenkao/article/details/5688557
{
this.Text = string.Format("{0}/{1}",i,1000);
});
method();
});
th.Start();
不死么....为何要用Thread.Sleep(100); 这个呢?
1、窗体this.Refresh();强制重新绘制
2、backgroundworker组件
3、委托一个新线程去处理循环体 public void test()
{
int i=0;
while (i<100000)
{
this.Invoke
(
(MethodInvoker)delegate()
{
label1.Text = i.ToString();
}
);
i += 100;
}
}
private void button1_Click(object sender, EventArgs e)
{
i = 0;
Thread th = new Thread((ThreadStart)delegate()
{
test();
});
th.Start();
}
不要一看到Thread就是多线程