C#中为什么进度条不能执行完,也就是进度没到运行底
if(progressBar1.Value<progressBar1.Maximum){progressBar1.Value+=1;}就是用这个代码也不能运行完,请高手帮...
if (progressBar1.Value < progressBar1.Maximum)
{
progressBar1.Value += 1;
}
就是用这个代码也不能运行完,请高手帮助下
我想让它,到底后,又重新开始,一直循环 展开
{
progressBar1.Value += 1;
}
就是用这个代码也不能运行完,请高手帮助下
我想让它,到底后,又重新开始,一直循环 展开
4个回答
展开全部
首先,做个实验在窗体上扔上个进度条控件。把进度条的Value值改成100,注意看,进度条不是一下就跳到满值的,而是缓慢的,逐渐的变到满值。也就是说,进度条跳帧这个特效是需要一定的延时的。而进度条每动一帧,这个延时都会累加,也就是说,你程序控制进度条每次+1,100次后,这个延时会搞到你看到进度条半天不动一下。
进度条的Paint过程是单独一个线程的,无论你的主线程如何处理都控制不了这个线程。你只能等系统处理完消息队列才能看到正常的效果。
处理这个等待的过程有人用System.Threading.Thread.Sleep(1000)过程,加延时的思路是对的,但是技术不对症。我们的目地是让系统把消息队列处理完,而不是系统去睡觉!
想让系统把消息处理完必须调用Application.DoEvents(),调一次还不成,怎么也还要等会儿,这个等待的函数是这样的:
private void MyDelay(int millisecond)
{
int i = Environment.TickCount;
while (Environment.TickCount - i < millisecond)
{
Application.DoEvents();
}
}
在progressBar1.Value += 1;这行后面加上这一句MyDelay(200);,好了绝对解决问题。
进度条的Paint过程是单独一个线程的,无论你的主线程如何处理都控制不了这个线程。你只能等系统处理完消息队列才能看到正常的效果。
处理这个等待的过程有人用System.Threading.Thread.Sleep(1000)过程,加延时的思路是对的,但是技术不对症。我们的目地是让系统把消息队列处理完,而不是系统去睡觉!
想让系统把消息处理完必须调用Application.DoEvents(),调一次还不成,怎么也还要等会儿,这个等待的函数是这样的:
private void MyDelay(int millisecond)
{
int i = Environment.TickCount;
while (Environment.TickCount - i < millisecond)
{
Application.DoEvents();
}
}
在progressBar1.Value += 1;这行后面加上这一句MyDelay(200);,好了绝对解决问题。
展开全部
很有可能是你的progressBar1的step属性没有改,progressBar1的step属性默认是10,你改成1就行了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
progressBar1.Value 是进度条的当前值,progressBar1.Maximum是进度条的最大值。
不知道你之前怎么设置的。假定最开始你设置progressBar1.Value为0,progressBar1.Maximum为100。
private void process(object sender, RoutedEventArgs e)
{
if (progressBar1.Value < progressBar1.Maximum)
progressBar1.Value += 10;
else
{
progressBar1.Value = progressBar1.Maximum;
(sender as Button).IsEnabled = false;
}
}
这样当结束的时候,直接显示到头了。
=======================================================================
要是到底后,又重新开始,一直循环,你可以试试将progressBar1的Style修改为:Marquee
然后不用做任何修改了,原来的Value 之类的修改都可以去掉。可能就是你要的效果。
如果觉得不好,也可以修改代码为:
progressBar1.Style = ProgressBarStyle.Blocks;
if (progressBar1.Value < progressBar1.Maximum)
progressBar1.Value += 10;
else {
progressBar1.Value = progressBar1.Minimum;
}
这样到了最后,进度会归零。
不知道你之前怎么设置的。假定最开始你设置progressBar1.Value为0,progressBar1.Maximum为100。
private void process(object sender, RoutedEventArgs e)
{
if (progressBar1.Value < progressBar1.Maximum)
progressBar1.Value += 10;
else
{
progressBar1.Value = progressBar1.Maximum;
(sender as Button).IsEnabled = false;
}
}
这样当结束的时候,直接显示到头了。
=======================================================================
要是到底后,又重新开始,一直循环,你可以试试将progressBar1的Style修改为:Marquee
然后不用做任何修改了,原来的Value 之类的修改都可以去掉。可能就是你要的效果。
如果觉得不好,也可以修改代码为:
progressBar1.Style = ProgressBarStyle.Blocks;
if (progressBar1.Value < progressBar1.Maximum)
progressBar1.Value += 10;
else {
progressBar1.Value = progressBar1.Minimum;
}
这样到了最后,进度会归零。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
if改成While吧!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询