Изменение содержимого EditBox при обработке обработчика событий в VC++ mfc

Когда я нажимаю кнопку в VC++, программа начинает считывать данные с USB, что занимает несколько минут. Во время этой операции я хочу показать статус прогресса в поле редактирования в том же диалоговом окне, используя m_editCtrl.SetWindowTextW(output1); Но во время передачи содержимое поля редактирования не изменяется. Как мы можем это изменить?

Спасибо


person amir mohamad hatami    schedule 13.06.2017    source источник
comment
Поскольку ваш ввод-вывод занимает некоторое время, вам нужно выполнить его в отдельном потоке.   -  person rrirower    schedule 13.06.2017
comment
Не выполняйте длительные задачи в потоке пользовательского интерфейса. Вы можете либо разгрузить работу в рабочий поток, либо использовать асинхронный ввод-вывод.   -  person IInspectable    schedule 13.06.2017
comment
Как сделать еще одну нить? @rrrower   -  person amir mohamad hatami    schedule 14.06.2017


Ответы (1)


Если основной поток занят, как в цикле, он не будет обновлять графический интерфейс. Вы должны создать поток, который выполняет тяжелую работу, а поток, в свою очередь, должен публиковать сообщения об обновлениях в графическом интерфейсе.

Вот пример для начала и будет делать свою работу, но ее можно улучшить. В этом примере поток напрямую вызывает GUI API, но будет еще лучше, если вы отправите сообщение в родительское окно с помощью HWND, и оно само обновится.

person zar    schedule 16.06.2017