当前位置:编程学习 > C#/ASP.NET >>

求问关于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 楼 sp1234 的回复:
在循环里加入一句  Application.DoEvents。

+1 --------------------编程问答-------------------- +1 是什么意思? --------------------编程问答-------------------- 我的progressBar 的 Style 是Marquee的,不能用PerformStep函数
引用 5 楼 rjinliang 的回复:
代码中没有看到进度条的执行语句。改为这样试试:
public void setString(string str)
{
this.label1.Text = number + "\r\n";
this.label1.Refresh();
this.progressBar1.PerformStep(); //执行进度条
}
--------------------编程问答-------------------- 什么+1?
你是说还是直接用Application.DoEvents么,后来那种加上没有作用呢~

引用 6 楼 fengyarongaa 的回复:
引用 1 楼 sp1234 的回复:

在循环里加入一句 Application.DoEvents。

+1
--------------------编程问答-------------------- 这样子就可以了。
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;
            }
        } --------------------编程问答--------------------
引用 4 楼 fishcoder 的回复:
大虾,现在我把循环去掉,用
Application.DoEvents();
Thread.Sleep(1000);
Number = number + 1;
Thread.Sleep(1000);
Number = number + 1;
Thread.Sleep(1000);
Number = number + 1;
Thread.Sleep(1000);
Number = ……


跟你说循环里加一句.....,结果你把循环去掉了,说你什么好呢?! --------------------编程问答-------------------- 循环是什么意思?不就是每当+1的时候都要DoEvents一次嘛!而你去掉了循环,还有没有........唉,晕倒啊。 --------------------编程问答-------------------- 主线程跑 进度条   
另起一线程跑业务逻辑 运行状态回调  --------------------编程问答-------------------- 看到#4楼的代码,我想如果你是学生,可能是非常需要换一个老师教你编程和逻辑的。

我们读代码,绝不纠缠于你是用什么编程语言写的,也不肤浅地匹配字词,而是看功能逻辑。功能逻辑,随便在一张餐巾纸上画个序列图(或者流程图),或者随便用个编程语言写出来,都是几乎一模一样的。我们看功能逻辑,而不是简单地看类似的代码单词堆砌了多少遍。 --------------------编程问答-------------------- 那个我明白您的意思,当初我的循环只是在模拟一直在做不同的长时间操作。
然后在whle循环中增添那个
Application.doEvents()函数,一开始我的Sleep时间是200ms,在操作中我误以为是问题得到解决,当将时间换成原来的1000ms时,进度条仍然不能一直递增(我的进度条的Style是Marquee格式的,应该是一直在增加,和Windows启动时的一样)
当我将您给我的方法用到程序中去的时候,仍然不能解决问题,于是我就把循环去掉,变成了去除While的形式进行测试,也不行,当然也包括在每一个Number + 1后面添加Application.doEvents()函数。
现在也就是说,(其实这个和while循环无关),给Number+ 1后面加Application.doEvents()仍然不起作用。
刚开始用C#,不明之处,还请指教,谢谢!
引用 14 楼 sp1234 的回复:
看到#4楼的代码,我想如果你是学生,可能是非常需要换一个老师教你编程和逻辑的。

我们读代码,绝不纠缠于你是用什么编程语言写的,也不肤浅地匹配字词,而是看功能逻辑。功能逻辑,随便在一张餐巾纸上画个序列图(或者流程图),或者随便用个编程语言写出来,都是几乎一模一样的。我们看功能逻辑,而不是简单地看类似的代码单词堆砌了多少遍。
--------------------编程问答-------------------- 通过下面的方法可以解决,因为如果我把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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,