由于冻结窗口赢取visual c ++,进度条无法正常工作

时间:2013-03-09 06:48:57

标签: visual-c++ progress-bar

我得到了一个程序,我计算了一些数据。我有一个迭代一些节点的进程。我添加了一个进度条,以显示计算过程中的一些信息,但它不起作用。在开始该过程之前,条形设置为0,当它完成时它已经满了,但它只是从0跳到100.我认为这是因为窗口形式在计算时冻结,我不知道如何避免这种情况情况。有线索吗? 关于栏的代码:

         progressBar1->Minimum=0;
         progressBar1->Maximum=100;
         for( i = 0; i <= 100; i++) {
             progressBar1->Value = i;
             progressBar1->Refresh();
         }

谢谢!

1 个答案:

答案 0 :(得分:0)

进度条不会以这种方式更新,至少它不会以交互方式显示给用户。原因很简单,您不允许UI消息循环处理您的消息。 Windows有它的消息泵,必须处理它才能显示UI。例如,当您说Value = 10时,它会将消息发送到UI消息循环,但您不允许它处理,并且您发送另一条消息。这样UI就会一直冻结。

另一种更好的方法是创建一个单独的线程来运行循环。从该线程,调用方法来更新UI。你会喜欢阅读this article。虽然它不包括C ++中的.NET,但会清除大部分内容。