1

我使用 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!";
     }
4

2 回答 2

2

这是因为更新发生在您的程序下次运行其事件处理循环时。而且由于您使用冗长的函数调用来阻止它,因此不会发生。

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

于 2013-02-19T09:52:49.627 回答
2

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

于 2013-02-19T10:16:03.923 回答