求问关于progressBar不能正常显示进度
--------------------编程问答-------------------- 在循环里加入一句 Application.DoEvents。 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 大虾,现在我把循环去掉,用Application.DoEvents();
Thread.Sleep(1000);
Number = number + 1;
Thread.Sleep(1000);
Number = number + 1;
Thread.Sleep(1000);
Number = number + 1;
Thread.Sleep(1000);
Number = number + 1;
这个来模拟,进度条还是不能正常显示,是什么问题呢?求问 --------------------编程问答-------------------- 代码中没有看到进度条的执行语句。改为这样试试:
public void setString(string str)
{
this.label1.Text = number + "\r\n";
this.label1.Refresh();
this.progressBar1.PerformStep(); //执行进度条
} --------------------编程问答--------------------
+1 --------------------编程问答-------------------- +1 是什么意思? --------------------编程问答-------------------- 我的progressBar 的 Style 是Marquee的,不能用PerformStep函数
--------------------编程问答-------------------- 什么+1?
你是说还是直接用Application.DoEvents么,后来那种加上没有作用呢~
--------------------编程问答-------------------- 这样子就可以了。
private void button11_Click(object sender, EventArgs e)
{
number = 0;
this.progressBar1.Value = 0;
while (true)
{
Thread.Sleep(200);
Number = number + 1;
System.Windows.Forms.Application.DoEvents();
if (Number == 10)
break;
}
} --------------------编程问答--------------------
跟你说循环里加一句.....,结果你把循环去掉了,说你什么好呢?! --------------------编程问答-------------------- 循环是什么意思?不就是每当+1的时候都要DoEvents一次嘛!而你去掉了循环,还有没有........唉,晕倒啊。 --------------------编程问答-------------------- 主线程跑 进度条
另起一线程跑业务逻辑 运行状态回调 --------------------编程问答-------------------- 看到#4楼的代码,我想如果你是学生,可能是非常需要换一个老师教你编程和逻辑的。
我们读代码,绝不纠缠于你是用什么编程语言写的,也不肤浅地匹配字词,而是看功能逻辑。功能逻辑,随便在一张餐巾纸上画个序列图(或者流程图),或者随便用个编程语言写出来,都是几乎一模一样的。我们看功能逻辑,而不是简单地看类似的代码单词堆砌了多少遍。 --------------------编程问答-------------------- 那个我明白您的意思,当初我的循环只是在模拟一直在做不同的长时间操作。
然后在whle循环中增添那个
Application.doEvents()函数,一开始我的Sleep时间是200ms,在操作中我误以为是问题得到解决,当将时间换成原来的1000ms时,进度条仍然不能一直递增(我的进度条的Style是Marquee格式的,应该是一直在增加,和Windows启动时的一样)
当我将您给我的方法用到程序中去的时候,仍然不能解决问题,于是我就把循环去掉,变成了去除While的形式进行测试,也不行,当然也包括在每一个Number + 1后面添加Application.doEvents()函数。
现在也就是说,(其实这个和while循环无关),给Number+ 1后面加Application.doEvents()仍然不起作用。
刚开始用C#,不明之处,还请指教,谢谢!
--------------------编程问答-------------------- 通过下面的方法可以解决,因为如果我把Sleep放在button的处理函数中的话,意味着主线程会一直Sleep,当然也就不会刷新ProgressBar,现在我将Sleep放在新起的线程中处理,主线程就可以刷新ProgressBar,大概就是这个道理,不知道我说清楚了没有。
private void test()
{
while (true)
{
Thread.Sleep(1000);
Number = number + 1;
if (Number == 10)
break;
}
}
private void button1_Click(object sender, EventArgs e)
{
Thread th = new Thread(new ThreadStart(test));
th.Start();
}
补充:.NET技术 , C#