2009-09-24 15 views
0

scénario suivant. J'ai un datagridview et une barre de progression, datagridview est rempli avec des données du répertoire actif. Remplir mon datagridview prend environ 3 minutes. Maintenant, pendant que mon programme fonctionne, tout va bien jusqu'à ce que je change de fenêtre - comme par exemple un navigateur Web ouvert ou autre chose. Quand je reviens à mon programme, toute la fenêtre est "gelée", la barre de progression ne montre aucun progrès jusqu'à ce que le remplissage soit terminé. Comment puis-je actualiser ma vue de données et ma barre de progression afin que quelque chose de ce genre ne se produise plus? J'ai essayé datagdidview.Invalidate() et Refresh() s'exécutent toutes les 5s (via Timer, oui il était activé) mais cela ne fonctionne pas. Qu'est-ce que j'oublie ici?Fenêtre de rafraîchissement C# en faisant autre chose

Merci!

Répondre

2

Vous devez exécuter l'interface utilisateur et les méthodes de travail sur différents threads, sinon l'interface utilisateur se verrouillera lorsque votre DataGridView fonctionnera.

3

Vous devriez chercher les données dans un thread séparé (en utilisant par exemple BackgroundWorker ou un nouveau thread), retour au marshalling thread d'interface utilisateur (avec BackgroundWorker.ReportProgress sur Control.Invoke/BeginInvoke) lorsque vous avez besoin d'interagir avec l'interface utilisateur. Voir this article pour plus d'informations et un exemple de code.

Questions connexes