2009-10-21 6 views
0

J'ai une étiquette sur un écran d'accueil qui s'affiche pendant 4 secondes. J'essaie de faire en sorte que l'étiquette affiche le processus de chargement en pourcentage. Évidemment, c'est juste pour montrer à l'utilisateur que le programme démarre réellement et ne "charge" rien. Y a-t-il un moyen pour que l'étiquette affiche le pourcentage (allant de 1% à 100%) dans les 4 secondes? Un peu perdu sur la façon de le faire.C# - Affichage du chargement de 1 à 100% en 4 secondes

+0

Mais cela ne dépendrait-il pas de la performance de l'ordinateur? Je veux dire que même si votre écran de démarrage indique "Terminé" parce que vous utilisez un temps fixe, votre formulaire principal peut ne pas être terminé à ce moment-là. – Tarik

+0

Eh bien, il est moins probable que cela arrive dans les ordinateurs rapides actuels. – Tarik

Répondre

4

Placez un contrôle Timer sur le formulaire et définissez sa propriété Interval sur 40 et sa propriété Enabled sur true. Créer une variable sous forme de niveau comme celui-ci:

private int _Progress = 0; 

Dans l'événement Tick de la minuterie, mettre ce code:

if (_Progress < 100) 
{ 
    _Progress++; 
    label1.Text = _Progress.ToString() + "%"; 
} 
else 
{ 
    timer1.Enabled = false; 
} 

minuteries ne sont pas vraiment précis à la milliseconde, donc ce ne sera pas exactement 4 secondes, mais ça va faire l'affaire.

+0

Le problème est que votre solution nécessite l'exécution du programme, et il veut quelque chose qui montre que le programme est en cours de chargement pendant qu'il est en train de démarrer. –

+0

@James: sérieux? Faire un écran de démarrage en C++ non géré? Les obusiers ont tendance à faire un gros désordre quand vous les utilisez sur des souris. :) – MusiGenesis

+0

@Nate: cela signifie probablement que cela prend seulement 1,6 secondes pour charger votre formulaire principal. – MusiGenesis

1

En supposant que vous parlez WinForms (pas WPF), le moyen le plus simple serait un contrôle de minuterie. Régler le délai d'attente pendant 40 ms (4 secondes = 4000 ms 4000 ms/100 mises à jour = 40 ms). Créez un entier de niveau classe pour suivre la progression. Ensuite, votre code pour l'événement OnTick ressemblerait à quelque chose comme ça ...

if(progress < 100) 
{ 
    progress++; 
    progessLabel.Text = String.Format("Loading... Progress: {0}%", progress); 
} 
else 
{ 
    timer.Enabled = false; 
} 
+0

C'est * deja vu * encore une fois! – MusiGenesis

0

Une minuterie avec l'intervalle défini dire 100 millisecondes serait l'approche la plus simple. Tenez compte du nombre de fois que l'événement timer est appelé et mettez à jour la barre de progression de 2,5% chaque tick.

Bien que cela fonctionne, je dirais qu'une barre de progression n'est pas idéale pour cette situation. Au lieu de cela, un graphique animé serait préférable car il donne une indication que votre programme démarre, mais ne trompe pas comme une barre de progression peut.

Je pense que Microsoft fait régulièrement cette erreur en utilisant des barres de progression trompeuses dans certaines applications.

+0

Netscape avait l'habitude de faire cela avec une barre de progression qui allait tout à fait vers la droite, puis se retournait et commençait à revenir vers la gauche, et ainsi de suite aussi longtemps que le chargement prenait (ce qui était généralement dans les années 90). – MusiGenesis

Questions connexes