Deux thread acces à un objet [Résolu]

rikoukiki 5 Messages postés jeudi 2 novembre 2006Date d'inscription 5 juin 2010 Dernière intervention - 23 avril 2010 à 09:48 - Dernière réponse : billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention
- 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
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 23 avril 2010 à 13:36
3
Merci
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
---------------------

Merci billou_13 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de billou_13
Meilleure réponse
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 26 avril 2010 à 09:29
3
Merci
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
---------------------

Merci billou_13 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de billou_13
rikoukiki 5 Messages postés jeudi 2 novembre 2006Date d'inscription 5 juin 2010 Dernière intervention - 23 avril 2010 à 14:06
0
Merci
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.
Commenter la réponse de rikoukiki
rikoukiki 5 Messages postés jeudi 2 novembre 2006Date d'inscription 5 juin 2010 Dernière intervention - 27 avril 2010 à 08:38
0
Merci
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
Commenter la réponse de rikoukiki
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 27 avril 2010 à 10:09
0
Merci
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
---------------------
Commenter la réponse de billou_13

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.