1

Winforms/C++ を使用して PC アプリケーションを作成しました。外部 EEPROM から PC にデータを取り込もうとしています。これは、Winforms アプリケーションのボタンをクリックしたときに行います。ダウンロードが完了するまでに時間がかかるため、最初に「電圧変動データをダウンロードしています。しばらくお待ちください... 」と表示してユーザーに知らせるテキストボックスを用意し、次にデータのダウンロードを開始する関数を呼び出します(約 30 秒)、最後に「完了!」を出力します。

しかし、私が直面している問題は、最初の行の「電圧変動データをダウンロードしています。しばらくお待ちください... 」がすぐに表示されず、「完了! 」と一緒に表示されるのは30 秒後です。これは目的を果たしません。

私は C++ を初めて使用するわけではありませんが、これは WinForms を使用する最初の試みであるため、テキストをすぐに表示するにはどうすればよいかわかりません。

テキストを明示的にリッチテキストボックスにフラッシュする機能はありますか?

ボタンの私のコードは以下の通りです。

private: System::Void button4_Click(System::Object^  sender, System::EventArgs^  e)
     {

        this->richTextBox1->Text += "\n> Downloading Voltage fluctuation data...";

        Download_EEPROM_data();

        this->richTextBox1->Text += " done!";
     }
4

2 に答える 2

2

これは、プログラムが次にイベント処理ループを実行したときに更新が行われるためです。そして、長い関数呼び出しでそれをブロックするので、それは起こりません。

考えられる解決策の1つは、別のスレッドを使用してダウンロードを実行することです。そのスレッドは、メインGUIスレッドにそのステータスを通知します。

于 2013-02-19T09:52:49.627 に答える
2

button4_Click(...)が戻ると、現在Download_EEPROM_data()呼び出しがブロックしているため、更新が表示されます。eepromからデータをダウンロードする別のスレッドを使用して、メインスレッドに通知すると、「完了」メッセージを投稿できます。

于 2013-02-19T10:16:03.923 に答える