我遇到了我认为是Windows 7上的进度条错误.为了演示该错误,我创建了一个带有按钮和进度条的WinForm应用程序.在按钮的'on-click'句柄中,我有以下代码.
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";
}
Run Code Online (Sandbox Code Playgroud)
预期的行为是进度条前进到100%,然后按钮文本更改为"就绪".但是,在Windows 7上开发此代码时,我注意到进度条将上升到大约75%,然后按钮文本将变为"就绪".假设代码是同步的,这不应该发生!
在进一步测试中,我发现在Windows Server 2003上运行的完全相同的代码产生了预期的结果.此外,在Windows 7上选择非空气动力学主题会产生预期的结果.
在我看来,这似乎是一个错误.当长操作涉及复杂的代码时,通常很难使进度条准确,但在我的特定情况下它非常直接,所以当我发现进度控制没有准确地表示进度时我感到很失望.
有没有人注意到这种行为?有人找到了解决方法吗?
我有一个简单的C++/MFC对话框,其中包含进度条控件.我用PBM_SETPOS消息或MFC 设置它的位置:
//CProgressCtrl myCtrl;
myCtrl.SetPos(position);
Run Code Online (Sandbox Code Playgroud)
它工作正常,除非我需要这个位置快速增长,它似乎落后了.
有没有办法消除这种滞后?
PS.我在旧版本的Windows上尝试了我的应用程序(具有经典的视觉样式),并且在那里不存在这种滞后.