Deux thread acces à un objet

Résolu
rikoukiki Messages postés 5 Date d'inscription jeudi 2 novembre 2006 Statut Membre Dernière intervention 5 juin 2010 - 23 avril 2010 à 09:48
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 - 27 avril 2010 à 10:09
Bonjour

J'ai crée une classe qui permet de mettre à jours une base de données.
L'objet de cette classe est lancé dans un thread séparé ou par des méthodes get et set j'alimente des valeurs pour une progress bar.


namespace fmm
{
    class Update
    {

        private string texte;
        private int progression;
        public object synchro = new object();

        public Update()
        {

            settext("Téléchargement des fichiers");
            setint(75);

            Thread.Sleep(100000);
            
            [beaucoup de codes ....]

         }

     private void settext(string texte)
        {
            Monitor.Enter(synchro);
            this.texte = texte;
            Monitor.Exit(synchro);

        }

        private void setint(int value)
        {
            Monitor.Enter(synchro);
            this.progression = value;
            Monitor.Exit(synchro);

        }

        public string gettext()
        {
            
            return texte;
            
        }

        public int getvalue()
        {
            
            return progression;

        }


Je prends la peine de mettre un mutex ici pour éviter les accès concurrents.


dans mon formulaire principale je lance deux thread :

    

private void startupdate_Click(object sender, EventArgs e)
        {


            // Déclaration du thread
            Thread myThread;
            Thread myThread2;

            //update dans un autre thread
            
            
            barreprogress.Maximum = 100;
          
            myThread = new Thread(new ThreadStart(misajour));
            myThread.IsBackground = true;
            myThread.Start();

            myThread2 = new Thread(new ThreadStart(updateinterface));
            myThread2.IsBackground = true;
            myThread2.Start();

                 
            
        }


        public void misajour()
        {
            update = new Update();
            
        }

        public void updateinterface()
        {
          //code pas beau à modifier
          while (true)
            {
                
                try
                {
                    barreprogress.Value = update.getvalue();
                    labprogress.Text = update.gettext();
                }
                catch
                {

                }
                
               
            }

        }


Et bien-sur ça marche pas "La référence d'objet n'est pas définie à une instance d'un objet."

Je bloque pas mal sur ce problème et ne sais plus quoi faire.

Pouvez vous m'aider si il vous plait merci d'avance

5 réponses

billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
23 avril 2010 à 13:36
Bonjour,

Pour ce faire, la source de MorpionMx devrait fortement t'intéresser:
http://www.csharpfr.com/codes/THREAD-PROGRESSBAR-EXEMPLE-SIMPLE_40294.aspx

Bon développement,


Billou_13

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
3
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
26 avril 2010 à 09:29
Salut,

Tu peux surement palier à ton problème par l'utilisation d'événements.
Ceci te permettra de bien séparer tes objets (sans que un seul ne dépende d'un autre).
Ainsi, ton thread de traitement pourra déclencher un événement ("OnSetText" par exemple) qui permettra de mettre à jour ta progressBar...
Tu trouveras beaucoup de code pour faire ceci.

Bon développement,

Billou_13

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
3
rikoukiki Messages postés 5 Date d'inscription jeudi 2 novembre 2006 Statut Membre Dernière intervention 5 juin 2010
23 avril 2010 à 14:06
Merci

le code et bien instructif

mais mon cas est diffèrent je lance un objet qui est dans une classe séparé dans un thread.

Puis je démarre un autre thread qui est charger d'accéder a cet objet.

J'aimerais pas mettre tout mon processus de mise à jours dans le code de mon formulaire.
0
rikoukiki Messages postés 5 Date d'inscription jeudi 2 novembre 2006 Statut Membre Dernière intervention 5 juin 2010
27 avril 2010 à 08:38
salut

Bon j'ai trouvé une solution à mon problème en relisant ma classe j'ai pu factoriser mon code en plusieurs méthodes bien distincts ce qui ma facilité le travail pour mettre en place les évènements.

Je vous remercie pour votre aide comme le disais ma grand mère je me suis couché moins con ces derniers jours
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
27 avril 2010 à 10:09
Salut,

Sache que l'on se couche tous moins cons tous les soirs... (sinon, c'est qu'on le reste...)

Bon développement et bonne continuation !

Billou_13

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
0
Rejoignez-nous