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 に答える