2010-12-07 40 views
0

Dans une application que j'écris, je dois charger beaucoup de données dans une liste après avoir appuyé sur un bouton donné. Parce que cela peut prendre un certain temps, je veux montrer un écran de chargement simple à l'utilisateur. Je l'ai fait en créant un formulaire très simple avec 1 étiquette dessus. Je fais un Form.Show() avant de commencer à récupérer les données, et un Form.Ferme() une fois terminé. Cela fonctionne partiellement: je reçois l'écran de chargement, il se ferme au bon moment, mais comme vous pouvez le voir l'étiquette ne s'affiche pas. Je sais que je devrais programmer ce problème d'écran avec l'aide d'un BackgroundWorker, mais je ne suis pas un programmeur C# très expérimenté, donc si je pouvais juste forcer l'affichage de l'étiquette je serais plus qu'heureux.C# Étiquette ne s'affiche pas à l'écran de chargement

Est-il possible de forcer l'affichage immédiat de cette étiquette ou dois-je trouver une autre solution?

Screenshot

+0

Peut-être une question daft mais - avez-vous défini label1.Visible = true? Est-il situé dans une partie de la fenêtre qui peut être vu? La couleur du texte est-elle la même que celle de l'arrière-plan? –

Répondre

3

L'interface utilisateur pompe du message n'a pas le temps de mettre à jour l'étiquette/rafraîchir l'écran depuis le processus de chargement prend toutes les ressources.

Vous pouvez essayer de forcer la mise à jour de l'étiquette en appelant le Application.DoEvents(). Bien que, en utilisant «Application.DoEvents» est imho une «odeur de code», et indique donc que la conception n'est pas si bonne. Donc, cela devrait être évité. Par conséquent, l'utilisation de DoEvents n'est certainement pas la meilleure solution à ce problème. Par conséquent, l'utilisation de DoEvents n'est certainement pas la meilleure solution à ce problème. C'est simplement une correction de symptôme.

Vous avez déjà mentionné la meilleure solution: utilisez un autre thread pour charger toutes les données. (Vous pouvez en effet utiliser un BackGroundWorker à cette fin, car cela enlèvera beaucoup de code de plomberie).

+1

Application.DoEvents() est à éviter. –

+0

Je suis totalement d'accord. C'est pourquoi je dis que ce n'est pas la meilleure solution et qu'un travailleur de fond devrait être préféré. –

+0

Et encore, je vais juste utiliser la solution simple, qui est la méthode Application.DoEvents(), qui fait exactement ce que j'ai demandé. C'est un programme vraiment simple avec pas beaucoup de lignes. Il peut ne pas être très professionnel d'utiliser la méthode mentionnée, mais ce n'est pas non plus une application très professionnelle;). Merci pour votre solution Frederik, bien que j'ai le sentiment que vous allez vous sentir mal pour le donner :). – Mee

3

BackgroudWorker est très facile à utiliser, même C# est très puissant et langugage simple,

See Here

je suis presque sûr que, vous auriez pas besoin de plus d'aide avec BackgroundWorker mais si vous avez des questions, vous pouvez toujours poster sur SO ?? Intelligence Collabartive est ce que le SO est?