2010-04-23 5 views
2

J'ai récemment commencé à programmer dans WinForms en utilisant C#. J'ai une exigence où je dois rechercher un ensemble de dossiers et les sous-dossiers et afficher les informations d'état à une zone de texte comme je fais la recherche comme -Écrire des messages d'état dans une zone de texte de manière asynchrone?

Recherche dossier "C: \ Windows" ...
trouvé 8 fichiers ...
fichiers copie 1 de 8 à « D: \ Temp » ...

j'ai une méthode qui fait toute la recherche et d'autres choses. Je ne sais pas comment afficher les messages d'état (comme ci-dessus) dans une zone de texte périodiquement. Actuellement, le formulaire attend que la méthode soit complète et affiche les messages en même temps. Je veux qu'ils soient affichés un par un au fur et à mesure que la méthode progresse.

Merci d'avance.

Répondre

1

utilisez une BackgroundWorkerThread et la fonction ReportStatus. De cette façon, votre interface utilisateur sera réactive pendant la recherche.

1

Exécutez la méthode qui effectue des recherches sur un thread distinct (si vous ne le faites pas déjà). C'est assez facile en utilisant le async delegate features in .NET.

Vous pouvez ensuite écrire dans la zone de texte à partir du thread de travail en utilisant Control.BeginInvoke() - vous devez le faire car l'accès au contrôle de l'interface utilisateur est affilié au thread de l'interface utilisateur unique.

Vous pouvez également créer un background worker thread et utiliser la méthode ReportProgress pour notifier l'interface utilisateur des mises à jour. Il y a un fairly complete example de cette approche disponible ici que vous pouvez télécharger et examiner.

2

Pour résoudre correctement ce problème, votre fonction de recherche doit être exécutée sur un fil d'arrière-plan. Si la recherche se produit sur le thread de l'interface utilisateur, il bloque les mises à jour de l'affichage empêchant l'affichage d'un message d'état périodique.

La façon la plus simple de faire cela dans une application WinForms est d'utiliser un BackgroundWorker. Il a un minimum de support pour exécuter une tâche sur un arrière-plan et renvoyer des informations de progression au thread de l'interface utilisateur. De plus, de nombreux tutoriels sont disponibles en ligne pour vous aider à démarrer avec une solution.

Questions connexes