0

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

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

谢谢!

4

1 回答 1

0

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

另一种更好的方法是创建一个单独的线程来运行您的循环。并从该线程调用方法来更新 UI。你会很感激阅读这篇文章。虽然它不涵盖 C++ 中的 .NET,但会清除大部分内容。

于 2013-03-09T07:29:01.893 回答