none
ProgressBar et threading RRS feed

  • Question

  • Bonjour,

    J'aimerais modifier la valeur d'une progressbar depuis un autre thread en C#.

    J'ai bien évidemment cherché sur google et le problème a été abordé à plusieurs reprises mais je n'ai pas réussi à l'appliquer à mon cas.

    Voici en gros la structure de mon appli :

    Comment depuis la fonction appelée par mon thread je peux modifier/initialiser mes progressbar ?

    Mon control Avancement possède des méthodes publiques qui ressemblent à ça :

    public void Augmenter(){
    progressBar.Value++;
    }
    
    public void Init(min,max)
    {
    progressBar.Min = min;
    progressBar.Max = max;
    }

    L'objectif est juste de pouvoir appeler ces deux méthodes.

    J'ai essayé ceci (entre autres):

    Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate()
                        {
                        Form1.Avancement.Init(0, max);
                        }));

    Mais sans succès, j'ai une erreur comme quoi il ne peut pas accéder à quelque chose qui ne lui appartient pas.

    Merci d'avance pour le temps que vous aurez pris à lire ce message et à y répondre.

    Cordialement,

    jeudi 18 octobre 2012 16:59

Réponses

  • Voici un code qui semble fonctionner :

    la routine de mon thread :

    _GUI.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate()
                    {
                       Form1.PartieAvancement.AvancementPlus1();
                    }));

    Mon thread étant créé comme ceci :

    thread_chargement = new Thread(new ParameterizedThreadStart(routine));
                        thread_chargement.IsBackground = true;
                        thread_chargement.Start(null);

    _GUI étant simplement une référence à ma Form principale (celle qui gère l'interface). Existe-il un moyen plus simple pour connaitre le dispatcher de celle-ci que de stocker une référence ?


    • Modifié r0seBa lundi 22 octobre 2012 13:22
    • Marqué comme réponse Aurel Bera mardi 23 octobre 2012 10:53
    lundi 22 octobre 2012 13:22

Toutes les réponses