IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#] ProgressBar Marquee


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Par défaut [C#] ProgressBar Marquee
    Bonjour,

    Je n'arrive pas à comprende comment marche une progressbar en mode marquee.

    Je veux lancer une tâche dont je ne connais pas la durée et j'aimerais faire une "progressbar" qui montre qu'il faut patienter.

    Comment faire pour lancer l'animation, et ensuite écouter le retour de la métode qui lance la tâche de durée inconnue ?

    Meric pour votre aide !!!

  2. #2
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut
    Hello,

    Si j'étais toi, je lancerais au début de ton action un progress_bar.visible = true et à la fin de ton traitement un progress_bar.visible = false. Tu n'as pas besoin de connaitre le temps, puis que ça sera contenu dans ta fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub CalculsPhysiquesCompliques()
    me.progress_bar.visible = true
    ...
    me.progress_bar,visible = false
    End sub

  3. #3
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut
    Dsl j'avais pas vu que ct du C# mais ça doit etre similaire

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Par défaut
    Bonjour PoZZyX !!

    J'ai essayé cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    progressBar1.Visible=true;
    Mais je ne vois rien progresser ou bouger ???

  5. #5
    Membre Expert Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Par défaut
    pour utiliser les progressbar le mieux c'est d'utiliser le backgroundworker

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 30
    Par défaut
    Tente un truc genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    progressBar1.Visible = true;
    while (test == false)
    {
          //Fonction qui incrémente la valeure de la progressbar
          progressBar1.Value = progressBar1.Value % progressBar1.Maximum + 1;
          Thread.Sleep(50);
    }
    Le code doit être lancé dans un thread;
    Avec "test" passé à true pour arréter la boucle.

    En espérant que cela t'aide !

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Par défaut
    Merci pour vos réponses !

    Pierre1256, j'ai fait ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    namespace PicsWizz
    {
        public partial class TestConnexion : Form
        {
            private string login;
            private string password;
            private bool test = false;
            public TestConnexion()
            {
                InitializeComponent();
     
            }
            public TestConnexion(string login, string password):this()
            {
                this.login = login;
                this.password = password;
                Thread T1 = new Thread(new ThreadStart(InitProgressBar));
                T1.Start();
            }
     
     
            private void InitProgressBar()
            {
                progressBar1.Visible=true;
     
                while (test == false)
                {
                    //Fonction qui incrémente la valeure de la progressbar
                    progressBar1.Value = progressBar1.Value % progressBar1.Maximum + 1;
                    Thread.Sleep(50);
                    progressBar1.Update();
                }
     
            }
    Mais malheureusment, ça bloque et j'ai l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Opération inter-threads non valide : le contrôle 'TestConnexion' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.
    Comment résoudre ce souci ???

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Par défaut
    En fait, je crois avoir à peu près compris comment me débrouiller avec le thread mais il reste un gros problème !!
    Le thread principal lance le thread T1.
    Une fois que mon thread T1 a fait son calcul comment faire pour qu'il renvoie son résultat (la valeur qu'il a trouvé par exemple) au thread principal !!!

    C'est là qu'est mon problème !!!!!

    PS: l'autre problème, c'est que je suis nul ..

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 30
    Par défaut
    Alors pour l'erreur que tu as eu, c'est normal le thread créé ne peut pas accéder à ton form d'origine.
    Pour cela il faut utiliser un delegate .... et l'appeler avec un invoke.
    C'est chiant !

    Pour ma part je lance la progressbar dans le thread principal et je fais mes calculs dans celui que je lance.

    Ensuite pour ce qui est de récupérer un résultat, il suffit de déclarer une variable (ou objet selon ce que tu souhaites avoir) public.

    Si par contre tu effectues des calculs complexes dans ton thread secondaire, je te conseille le delegate.

    Voilà

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET 2005] Progressbar en mode marquee
    Par Aspic dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/11/2006, 17h44
  2. ProgressBar en mode marquee (durée inconnue)
    Par Tenguryu dans le forum C++Builder
    Réponses: 1
    Dernier message: 23/09/2006, 17h14
  3. comment programmer une progressbar
    Par Choucas dans le forum Paradox
    Réponses: 3
    Dernier message: 13/11/2002, 11h07
  4. ProgressBar avec plusieurs procédures
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 08/09/2002, 18h03
  5. Couleur de ProgressBar
    Par benj63 dans le forum C++Builder
    Réponses: 7
    Dernier message: 04/07/2002, 17h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo