2009-10-21 6 views
0

Je me retrouve régulièrement à écrire de petits programmes utilitaires qui utilisent une boucle qui prend du temps à traiter. Cependant, pendant que la boucle est en cours, le formulaire ne s'actualise plus, donc si vous deviez déplacer le formulaire ou déplacer une autre fenêtre par-dessus, le formulaire serait vide jusqu'à la fin de la boucle.Comment est-ce que je garde un formulaire en blanc pendant que mon programme travaille sans utiliser un fond d'écran?

Maintenant, je sais que la façon correcte d'y faire face est d'utiliser un arrière-plan qui fonctionne pour effectuer la tâche fastidieuse sur un thread séparé. Mais je n'ai pas encore tout à fait la tête aux trucs multi-threads. Donc, si je n'utilise qu'un seul thread, quelle est la meilleure chose à faire sur chaque boucle pour maintenir le contenu du formulaire à jour? Par exemple, il peut y avoir une barre de progression dans le formulaire.

J'ai vu et utilisé diverses combinaisons de Form.Refresh(), Form.Update() et Application.DoEvents() mais je me demandais quelle est la meilleure façon de gérer cela?

Répondre

4

Vous pouvez truquer avec Application.DoEvents() à différents endroits dans le code, mais vous devriez vraiment mettre le travail dans un autre thread.

+0

D'accord. 'DoEvents' peut avoir des effets secondaires difficiles. –

1

Prenez cela comme une occasion d'entrer dans le filetage, vous devrez tôt ou tard. Le Bgw le rend facile: L'événement DoWork s'exécute sur un autre thread mais ProgressChange et Completed sont synchronisés sur le thread principal.

Trouvez quelques examples et soyez prudent lorsque vous utilisez des données partagées dans DoWork.

Questions connexes