我在 Windows 7 上遇到了我认为是进度条错误的问题。为了演示该错误,我创建了一个带有按钮和进度条的 WinForm 应用程序。在按钮的“单击”句柄中,我有以下代码。
private void buttonGo_Click(object sender, EventArgs e)
{
this.progressBar.Minimum = 0;
this.progressBar.Maximum = 100;
this.buttonGo.Text = "Busy";
this.buttonGo.Update();
for (int i = 0; i <= 100; ++i)
{
this.progressBar.Value = i;
this.Update();
System.Threading.Thread.Sleep(10);
}
this.buttonGo.Text = "Ready";
}
预期行为是进度条前进到 100%,然后按钮文本更改为“就绪”。然而,当在 Windows 7 上开发此代码时,我注意到进度条会上升到大约 75%,然后按钮文本会更改为“就绪”。假设代码是同步的,这不应该发生!
经过进一步测试,我发现在 Windows Server 2003 上运行的完全相同的代码产生了预期的结果。此外,在 Windows 7 上选择非航空主题会产生预期的结果。
在我看来,这似乎是一个错误。当长时间的操作涉及复杂的代码时,通常很难使进度条准确,但在我的特殊情况下,它非常简单,所以当我发现进度控件不能准确地表示进度时,我有点失望。
还有其他人注意到这种行为吗?有人找到解决方法了吗?
它与进度条的动画有关。如果你的进度条为 0%,而你将其设置为 100%,那么它不会跳到那里,而是让进度条平滑填充。如果速度太慢,您将在进度条完成动画之前完成。因此,即使您已经将其设置为 80%、90% 和 100%,动画仍然滞后。
我从未找到关闭此功能的方法,但我有一个解决方法。仅当您增加进度条时才会完成动画。如果你向后移动它,它会立即跳到那个位置。因此,如果我希望进度条位于 x% (x != 100),那么我将其移动到 x+1,然后移动到 x。如果我想要 100%,我会将其移动到 100%、99% 和 100%。 (或者无论您使用什么值,您都会明白。)它的运行速度足够快,以至于不可见,并且您也可以在以前的 Windows 版本中保留此代码。 (虽然我不)
HTH
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)