2009-08-20 12 views
3

Lors du démarrage de mon application, je dois d'abord lire certaines données, initier certaines formes et ainsi de suite. Pour l'instant, l'utilisateur voit juste gris prêt à afficher des formulaires.Comment afficher un écran de démarrage pour supprimer l'heure pendant le chargement des données?

Cela dure quelques secondes ...

Je pensais que d'un écran de démarrage qui charge les données dans une discussion séparée et montre aussi combien de temps il faudra. Ou juste une barre d'état?

Comment voulez-vous faire quelque chose comme ça?

J'utilise C# .NET 3.5 + Winforms

+0

Suuuubjeeeective .... –

+5

@Filip: Pourquoi "comment implémenter un écran de démarrage dans WinForms?" subjectif? – RichieHindle

+0

le titre de la question devrait probablement être changé pour refléter le commentaire de votre @ RichieHindle, alors il n'aurait pas l'air si subjectif –

Répondre

8

Voir cet article CodeProject: A Pretty Good Splash Screen in C#

Il implémente un écran de démarrage qui:

  • Runs sur un thread séparé
  • Fades tel qu'il apparaît et s'efface lorsqu'il disparaît
  • Affiche un message d'état en cours mis à jour à l'aide d'une méthode statique
  • Affiche et mettre à jour une prédiction auto-étalonnage barre de progression lisse gradient owner-drawn
  • Affiche le nombre de secondes restantes avant la charge est terminée

Voici un exemple de ce qu'il ressemble - peut-être vôtre Sois plus jolie. 8-)

alt text

+0

J'ai jeté un coup d'oeil à celui-ci avant mais ce n'est pas très bon - il utilise DoEvents() au lieu d'un vrai thread et il ne fait pas d'actions thread-save qui ne sont plus autorisées .NET 3.5 – Kai

+0

@Kai: Êtes-vous sûr? Je vois ceci: 'ms_oThread = nouveau Thread (nouveau ThreadStart (SplashScreen.ShowForm));' qui ressemble certainement à un vrai fil pour moi. Et aucune mention de «DoEvents». – RichieHindle

+2

@Kai: Im évaluer le même article Richie a souligné. Faites défiler vers le bas pour voir l'un des commentaires de Mahin Gupta qui a récemment réécrit une partie du code pour la compatibilité .net3.5, y compris certains problèmes thread-safe. – Shalan

0

Si elle ne dure que quelques secondes affichant alors l'attente curseur devrait être bon. On peut peut-être prévoir que la fenêtre principale est affichée aussi rapidement que possible et que le reste est démarré après la première mise à jour de l'écran (par exemple en utilisant une minuterie). Cela réduira le temps de démarrage perçu.

Afin de réduire le temps de démarrage, vous pouvez également considérer de retarder certaines actions de démarrage si elles ne sont pas strictement nécessaire. Cela peut être fait plus tard en arrière-plan en utilisant un minuteur ou à la demande.

0

J'ai récemment écrit un écran de démarrage similaire en utilisant Tom Clements comme base. Jetez un oeil à My Splash Screen pour voir si cela correspond à vos besoins.

Questions connexes