C#进度条与下载不同步(WebClient类)

3
我正在编写一个系统,其中包含了一个小型FTP模块,它并不是主要的功能,但是需要...

我必须将进度条与WebClient类事件DownloadProgressChangedEventHandler和AsyncCompletedEventHandler相链接,进度条增量是正确的,并且ASyncCompletedEventHandler启动了一个MessageBox(如预期),问题在于进度条似乎加载得太慢了...

问题:

我的MessageBox在100%时弹出(由事件处理程序启动),但当MessageBox弹出时,我的进度条仅在大约80%(但.VALUE实际上为100),我最初的想法是他们在Windows Vista中添加了“平滑”效果,与其真实值相比,这会减缓进度条的速度。

如果你们中的任何人遇到了同样的问题,感谢您的帮助。

3个回答

1

对于那些想知道的人,Vista实际上为加载栏添加了“平滑”效果,看起来像Flash中的“缓动效果”。

我在Windows XP上尝试过,当值达到100时,进度条确切地达到100%。在Vista上,它们似乎已经决定“加载”将分散在延迟X上。


0
在显示消息框之前,调用Application.DoEvents()来强制处理所有挂起的Windows队列消息。你的进度条可能没有机会在消息框显示之前最后一次绘制自己。

进度条应该在对话框可见时处理消息。 - SLaks
我无法在此处发布图片,因为我还没有足够的声望,但进度条并不是1-2步就完成了,它距离目标还有20%的距离(大约需要2秒左右的延迟)。我使用Application.DoEvents()进行了测试,但似乎没有改变什么,进度条仍然显示在80-85%左右(视觉上),而值是100。 - Dominique

0
为什么不在同一个DownloadProgressChangedEventHandler事件处理程序中将进度条的值直接设置为100%,而不是显示消息框呢?

呵呵,我也试过了,就像之前说的一样,我认为这可能是因为他们用Go语言编写的“平滑”造成的,即如果从0到100,它会慢慢增加,比如在1秒钟内分割成100%的增加,而不是“瞬间100%”。这可能与Windows Vista有关,我很快会在XP电脑上尝试,看看是否会出现相同的“平滑”效果。 - Dominique

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接