请教个关于ProgressBar的问题,进度显示不正常 C# ProgressBar 进度条C#ProgressBar进度条 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以这样写: private void button2_Click(object sender, EventArgs e) { ProgressBar pb = new ProgressBar(); this.Controls.Add(pb); pb.BringToFront(); pb.Minimum = 0; pb.Maximum = 20; pb.Value = 0; Task.Factory.StartNew(new Action(() => { do { pb.Invoke(new MethodInvoker(() => pb.Value++)); Thread.Sleep(200); } while (pb.Value < pb.Maximum); pb.Invoke(new MethodInvoker(() => pb.Visible = false)); })); } pb.Minimum = 1;pb.Maximum = 10;pb.Value = 5;Application.DoEvents(); 这个要放在下面,以便界面有机会处理新的消息 我每个value=x后面都跟了doevents啊,14行和23行我也试过,pb.Value = 2;前面再加一组doevents和sleep也是没效果的等我晚上试下再补充一句,如果当中再有performstep的话(即max-min>step),进度的增加能显示出来,唯有第一步和最后一步,会明显看出没有正确显示进度,即:第一次performstep时没推进,最后一次performstep时没到底 你一共只有0,1,2,3个数,第一次和最后一次不好使,那不是说就只好使了一次??建议你扩大样本,变成从0-100,再测试.上例中只有1、2两个数不是需要扩大样本,就比如你说的0-100那么第一次PerformStep,此时value==1(另加语句看过,value没有错),但是在progressbar上显示的还是空的,之后再一次PerformStep,此时value==2,这时候进度条有动静了,往前前进了,但是注意,此时进度条显示的进度实际上是value==1时的进度,之后随着value的增加,进度条一直在前进,但是实际上显示的进度是少了一个step的,直到最后,value==100的时候,进度完成了,但是进度条上会还差着一格,这就是我想找的问题之所在我上面的例子之所以只用1和2,就是因为这样最显眼(动,还是不动~),数字越多越不显眼,还费时间,没意义。事实上,在同一台机器上编的另一个程序,就没有发现这个问题(步数比较多,几百步,也可能是看不出来,确实有一次注意到第一步的时候没看到进度条动,但不确定是不是有问题,没在意),不过那个程序里在进度条进展期间是有一些语句在执行的但我不明白为什么这么简单的几句却会出现问题我这个程序里的步骤一般只有几步到二三十步,此时进度显示的异常太显眼了 你最后一个pb.Visible=false用来干嘛,把它去掉看看先 你能发个真实的测试代码上来吗,而不是你精简之后的你1楼发的代码,设置0,1,2之间根本没sleep,那不是一闪就过去了,能看到啥呀而把2个sleep放到最后,也是没啥用你是否把Application.DoEvents();放到sleep后面去了?? 1楼就是我的真实的测试代码啊value=2之后进度条有动静就对了,要的就是这效果,我的问题就是我这里出现了毫无动静的情况我这里只有最后放两段doevents和sleep,才能看到进度条变化我问的就是为什么会这样,该怎么解决有些人用这些代码可能无法看到这个效果(其实理论上就不该看到),那么就需要从理论上来帮忙想想是什么原因了……进度完成后就不需要进度条了,就隐藏咯。不过确实,我没看看之后不管的话会怎么样,回去可以试试。但不管结果如何,都与我现在遇到的问题无关,因为我就是要它在有限的时间内正确显示,不然,等进度都完成几秒钟了,才慢慢走完,就毫无意义了,而且正常使用时也是即刻隐藏的。正确的显示状态是,value=2之后,进度条立刻填满,之后是否隐藏已无关紧要。现在我的问题就是value=2的时候没有立刻作出正确的响应。 pb.Visible = false;这个只是控件隐藏了,但是它还在窗体中,每点一次都生成一个控件,点多了会不会窗体卡死啊... E3-1230V3GTX7708G任务管理器——性能:CPU使用率不超过4% 内存28%磁盘不超过7%这都不行的话,不知道要什么配置了在本机的虚拟机(win7)里跑都是正常的…… 我遇到的情况也差不多,在win8下无法充满,在win7下可以充满 winform重写ListBox C#后台模拟按键问题。调用了API SendMessage 问下Ilist<T>与DateTable问题 菜鸟提问~~~~~~ c#.net写代码时能像vb.net那样代码自动整理吗? c#中如何将字符串转化为变量名 正则高手帮忙啊!!!!! 继续NET超级算法(非标题党) c#生成的DLL可以加载运行在ASP.NET上吗??? Windows Server2008下cjwdev.windowsapi.dll为何会失效? 安装了vs2013,“将局部变量提升为参数”的功能为什么找不到啊 C# 线程之间的方法调用问题
{
ProgressBar pb = new ProgressBar();
this.Controls.Add(pb);
pb.BringToFront();
pb.Minimum = 0;
pb.Maximum = 20;
pb.Value = 0;
Task.Factory.StartNew(new Action(() =>
{
do
{
pb.Invoke(new MethodInvoker(() => pb.Value++));
Thread.Sleep(200);
} while (pb.Value < pb.Maximum);
pb.Invoke(new MethodInvoker(() => pb.Visible = false));
}));
}
pb.Maximum = 10;
pb.Value = 5;
Application.DoEvents(); 这个要放在下面,以便界面有机会处理新的消息
我也试过,pb.Value = 2;前面再加一组doevents和sleep也是没效果的
等我晚上试下再补充一句,如果当中再有performstep的话(即max-min>step),进度的增加能显示出来,唯有第一步和最后一步,会明显看出没有正确显示进度,即:第一次performstep时没推进,最后一次performstep时没到底
建议你扩大样本,变成从0-100,再测试.
上例中只有1、2两个数
不是需要扩大样本,就比如你说的0-100
那么第一次PerformStep,此时value==1(另加语句看过,value没有错),但是在progressbar上显示的还是空的,之后再一次PerformStep,此时value==2,这时候进度条有动静了,往前前进了,但是注意,此时进度条显示的进度实际上是value==1时的进度,之后随着value的增加,进度条一直在前进,但是实际上显示的进度是少了一个step的,直到最后,value==100的时候,进度完成了,但是进度条上会还差着一格,这就是我想找的问题之所在
我上面的例子之所以只用1和2,就是因为这样最显眼(动,还是不动~),数字越多越不显眼,还费时间,没意义。事实上,在同一台机器上编的另一个程序,就没有发现这个问题(步数比较多,几百步,也可能是看不出来,确实有一次注意到第一步的时候没看到进度条动,但不确定是不是有问题,没在意),不过那个程序里在进度条进展期间是有一些语句在执行的
但我不明白为什么这么简单的几句却会出现问题我这个程序里的步骤一般只有几步到二三十步,此时进度显示的异常太显眼了
你1楼发的代码,设置0,1,2之间根本没sleep,那不是一闪就过去了,能看到啥呀而把2个sleep放到最后,也是没啥用
你是否把
Application.DoEvents();
放到sleep后面去了??
value=2之后进度条有动静就对了,要的就是这效果,我的问题就是我这里出现了毫无动静的情况
我这里只有最后放两段doevents和sleep,才能看到进度条变化
我问的就是为什么会这样,该怎么解决有些人用这些代码可能无法看到这个效果(其实理论上就不该看到),那么就需要从理论上来帮忙想想是什么原因了……进度完成后就不需要进度条了,就隐藏咯。
不过确实,我没看看之后不管的话会怎么样,回去可以试试。
但不管结果如何,都与我现在遇到的问题无关,因为我就是要它在有限的时间内正确显示,不然,等进度都完成几秒钟了,才慢慢走完,就毫无意义了,而且正常使用时也是即刻隐藏的。
正确的显示状态是,value=2之后,进度条立刻填满,之后是否隐藏已无关紧要。现在我的问题就是value=2的时候没有立刻作出正确的响应。
这个只是控件隐藏了,但是它还在窗体中,每点一次都生成一个控件,点多了会不会窗体卡死啊...
GTX770
8G任务管理器——性能:
CPU使用率不超过4%
内存28%
磁盘不超过7%这都不行的话,不知道要什么配置了
在本机的虚拟机(win7)里跑都是正常的……