C++ Winforms:为什么富文本框不会立即更新文本?

C++ Winforms: Why doesn't the richtextbox update text instantly?

本文关键字:文本 更新 Winforms 为什么 C++      更新时间:2023-10-16

我已经用Winforms/C++编写了一个PC应用程序。我正试图从外部EEPROM中获取一些数据到我的电脑中,当我点击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!";
     }

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

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

当button_Click(…)返回时,您将看到更新,因为当前Download_EEPROM_data()调用正在阻止它。您可以使用一个单独的线程从EEPROM下载数据,完成后通知主线程,它可以发布"完成"消息。