2017-06-13 2 views
0

Lorsque j'appuie sur un bouton dans VC++, le programme commence à lire les données USB, ce qui prend plusieurs minutes. Au cours de cette opération, je veux afficher le statut de la progression dans une boîte d'édition dans le même dialogue en utilisant m_editCtrl.SetWindowTextW(output1); Mais pendant le transfert, le contenu de la boîte d'édition ne sont pas modifiés. Comment pouvons-nous le changer?Modification du contenu d'EditBox lors du traitement d'un gestionnaire d'événements dans VC++ mfc

Merci

+2

Comme votre E/S prend du temps, vous devez l'exécuter sur un thread séparé. – rrirower

+2

N'effectuez pas de tâches longues sur votre thread d'interface utilisateur. Vous pouvez soit décharger le travail sur un thread de travail, soit utiliser des E/S asynchrones. – IInspectable

+0

Comment faire un autre fil? @rrirower –

Répondre

0

Si le thread principal est occupé comme dans une boucle, il ne sera pas mise à jour GUI. Vous devriez créer un fil qui soulève les charges lourdes et le fil, à son tour, devrait publier des messages de mise à jour à l'interface graphique.

Here est un exemple pour commencer et fera le travail mais il peut être amélioré. Dans cet exemple, le thread appelle directement l'API GUI mais ce sera encore mieux si vous postez un message dans la fenêtre parent en utilisant HWND et qu'il se mettra à jour automatiquement.