72 votes

Barre de progression Windows Forms : façon la plus simple de démarrer/arrêter le défilement ?

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

108voto

Paul Fisher Points 6602

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.

53voto

Pour démarrer/arrêter l'animation, vous devez faire ceci :

Pour démarrer :

progressBar1.Style = ProgressBarStyle.Marquee;
progressBar1.MarqueeAnimationSpeed = 30;

Pour arrêter :

progressBar1.Style = ProgressBarStyle.Continuous;
progressBar1.MarqueeAnimationSpeed = 0;

9voto

Hans Passant Points 475940

Ce n'est pas ainsi qu'ils fonctionnent. Vous "démarrez" une barre de progression de style marquee en la rendant visible, vous l'arrêtez en la masquant. Vous pourriez modifier la propriété Style.

8voto

Arda Basoglu Points 61

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();
        }
    }
}

2voto

tvanfosson Points 268301

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).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X