讨论WinForm进度条的问题!高手请进~

fallingstarNo1 2006-09-27 10:43:02
如果代码这样写:
private void button1_Click(object sender, EventArgs e)
{
Thread newThread = new Thread(new ThreadStart(Run));
newThread.Start();
button1.Enabled = false;
CreateControl("System.Windows.Forms.TextBox", this, 10, 10);
}

private void Run()
{
MethodInvoker mi = new MethodInvoker(UpdateProgress);
while (true)
{
Invoke(mi);
Thread.Sleep(10);
}

}

private void UpdateProgress()
{
i++;
if (i % 100 == 0)
{
progressBar1.Increment(1);
}
button1.Text = i.ToString();
if (progressBar1.Value == 10)
{
button1.Enabled = true;
}
if (progressBar1.Value == 80)
{
Thread.CurrentThread.Abort();
this.Close();
}
}
显示没有问题!

但是如果改成:
private void button1_Click(object sender, EventArgs e)
{
Thread newThread = new Thread(new ThreadStart(Run));
newThread.Start();
button1.Enabled = false;
CreateControl("System.Windows.Forms.TextBox", this, 10, 10);
int i=0;
while(true)
{
i++;
if(i/100000 == 100000)
{
break;
}
}
}
窗体就会死在哪里不动了!谁能给解释一下,如何才能解决?
...全文
447 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingyaohua 2006-10-09
  • 打赏
  • 举报
回复
顶,顺便学习一下
cs920 2006-10-09
  • 打赏
  • 举报
回复
循环里加一个
Application.DoEvents();
wcmj 2006-10-09
  • 打赏
  • 举报
回复
if(i/100000 == 100000)

这个是什么进度呀....
sunzhong2003 2006-10-09
  • 打赏
  • 举报
回复
Application.DoEvents();同意
AlanChen 2006-10-09
  • 打赏
  • 举报
回复
diandian82 2006-10-08
  • 打赏
  • 举报
回复
那当然了,所以需要异步调用啊!
fallingstarNo1 2006-10-07
  • 打赏
  • 举报
回复
缩小范围了,也是窗体就会死在哪里不动了!等循环完了才能动!?
lovvver 2006-09-27
  • 打赏
  • 举报
回复
楼主的程序中相当于要做一个一百亿次的循环啊,牛!
Knight94 2006-09-27
  • 打赏
  • 举报
回复

if(i/100000 == 100000)
这句判断有问题

首先int整型不能超过2,147,483,647.

也就是循环永远不能退出。

修改方法,缩小范围。
covis 2006-09-27
  • 打赏
  • 举报
回复
在需要显示更新的代码后面加上Application.DoEvents();
股神 2006-09-27
  • 打赏
  • 举报
回复
死循环了
fallingstarNo1 2006-09-27
  • 打赏
  • 举报
回复
加了也不行!
worms8888 2006-09-27
  • 打赏
  • 举报
回复
int值能到10000000000?
sekone 2006-09-27
  • 打赏
  • 举报
回复
哦 是我错了 没看清 是要放在线程里
就是说
while(true)
{
i++;
if(i/100000 == 100000)
{
break;
}
}

这个放在线程里然后要加上Thread.sleep(1);
要不然也会象死在那里一样,我之前做的就那样
qiezic 2006-09-27
  • 打赏
  • 举报
回复
还有
while(true)
{
i++;
if(i/100000 == 100000)
{
break;
}
}
最好放到线程里做,不然是会卡在那里 ,如果按sekone() 说的会卡更久。不过用线程还是要休眠的!
qiezic 2006-09-27
  • 打赏
  • 举报
回复
不知循环10000000000次要多长时间,你等了足够长时间了吗
sekone 2006-09-27
  • 打赏
  • 举报
回复
你可以加一个Thread.sleep(1) 就不会死在那里不动了

while(true)
{
i++;
if(i/100000 == 100000)
{
break;
}
Thread.sleep(1);//加这一句
}
yang20052008 2006-09-27
  • 打赏
  • 举报
回复
循环太多了

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧