C ++ Winforms:为什么richtextbox不能立即更新文本?

时间:2013-02-19 09:48:50

标签: c++ winforms richtextbox

我使用Winforms / C ++编写了一个PC应用程序。我正试图从外部EEPROM中获取一些数据到我的PC中,当我单击Winforms应用程序上的按钮时,我会这样做。下载需要很长时间才能完成,因此我有一个文本框,我首先显示“ 下载电压波动数据,向用户表示。请稍候...... “,然后我调用开始下载数据的功能(大约需要30秒),最后我打印出一个” 完成! “。

但我遇到的问题是我的第一行“ 下载电压波动数据。请稍候...... ”不会立即显示“ 完成! ”仅在 30秒之后,这不符合此目的。

我不是C ++的新手,但这是我第一次尝试使用WinForms ,所以我不知道应该怎样做以立即启动文本。

是否有明确将文本刷新到richtextbox的功能?

按钮的代码如下所示。

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!";
     }

2 个答案:

答案 0 :(得分:2)

这是因为下次程序运行事件处理循环时会进行更新。而且由于你通过冗长的函数调用来阻止它,所以不会发生。

一种可能的解决方案是使用单独的线程进行下载,该线程通知主GUI线程它的状态。

答案 1 :(得分:2)

您将看到更新一次button4_Click(...)返回当前Download_EEPROM_data()调用阻止它。您可以使用一个单独的线程从eeprom下载数据,并完成后通知主线程,它可以发布“完成”消息。