Je suis en train d'utiliser C# et Windows Forms. J'ai une barre de progression normale qui fonctionne bien dans le programme, mais maintenant j'ai une autre opération où la durée ne peut pas être facilement calculée. J'aimerais afficher une barre de progression mais je ne sais pas comment commencer/arrêter le défilement du marquee. J'espérais quelque chose d'aussi simple que définir la vitesse du marquee et ensuite avoir un start() et un stop() mais cela ne semble pas être aussi simple. Dois-je exécuter une boucle vide en arrière-plan? Comment puis-je faire ça de la meilleure façon? Merci
Réponses
Trop de publicités?Utilisez une barre de progression avec le style défini sur Marquee
. Cela représente une barre de progression indéterminée.
myProgressBar.Style = ProgressBarStyle.Marquee;
Vous pouvez également utiliser la propriété MarqueeAnimationSpeed
pour définir la durée nécessaire au petit bloc de couleur pour traverser votre barre de progression.
Ce code fait partie d'un formulaire de connexion où les utilisateurs attendent la réponse du serveur d'authentification.
using System;
using System.ComponentModel;
using System.Threading;
using System.Windows.Forms;
namespace LoginWithProgressBar
{
public partial class TheForm : Form
{
// L'objet BackgroundWorker gère la tâche longue
private readonly BackgroundWorker _bw = new BackgroundWorker();
public TheForm()
{
InitializeComponent();
// définir MarqueeAnimationSpeed
progressBar.MarqueeAnimationSpeed = 30;
// définir Visible false avant de démarrer la tâche longue
progressBar.Visible = false;
_bw.DoWork += Login;
_bw.RunWorkerCompleted += BwRunWorkerCompleted;
}
private void BwRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// masquer la barre de progression lorsque le processus long se termine
progressBar.Hide();
}
private static void Login(object sender, DoWorkEventArgs doWorkEventArgs)
{
// émuler une tâche longue (3 secondes)
Thread.Sleep(3000);
}
private void ButtonLoginClick(object sender, EventArgs e)
{
// afficher la barre de progression lorsque l'événement associé se déclenche (ici, un clic sur un bouton)
progressBar.Show();
// démarrer la tâche longue de manière asynchrone
_bw.RunWorkerAsync();
}
}
}
Il y a un bel article avec du code sur ce sujet sur MSDN. Je suppose que définir la propriété Style sur ProgressBarStyle.Marquee n'est pas approprié (ou est-ce ce que vous essayez de contrôler ?? - Je ne pense pas qu'il soit possible d'arrêter/démarrer cette animation bien que vous puissiez contrôler la vitesse comme le mentionne @Paul).
- Réponses précédentes
- Plus de réponses