C ++ Winforms: Почему richtextbox не обновляет текст мгновенно?

Я написал приложение для ПК с использованием 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!";
}

1

Решение

Это потому, что обновление происходит в следующий раз, когда ваша программа запускает цикл обработки событий. А поскольку вы блокируете это длинным вызовом функции, этого не происходит.

Одним из возможных решений является использование отдельного потока для выполнения загрузки, и этот поток уведомляет основной поток GUI о своем статусе.

2

Другие решения

Вы увидите обновление, как только button4_Click (…) вернется, так как в настоящее время вызов Download_EEPROM_data () блокирует его. Вы можете использовать отдельную ветку, которая загружает данные из eeprom и, когда это сделано, информирует основную ветку, и она может публиковать сообщение «сделано».

2

По вопросам рекламы [email protected]