Я написал приложение для ПК с использованием Winforms / C ++. Я пытаюсь получить некоторые данные из внешнего 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 о своем статусе.
Вы увидите обновление, как только button4_Click (…) вернется, так как в настоящее время вызов Download_EEPROM_data () блокирует его. Вы можете использовать отдельную ветку, которая загружает данные из eeprom и, когда это сделано, информирует основную ветку, и она может публиковать сообщение «сделано».