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

C# Discussion :

Problème avec Thread


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Points : 30
    Points
    30
    Par défaut Problème avec Thread
    Bonjour, j'ai un message d'erreur lorsque que j'essai de modifier le contenu de la form (usercontrol) en cours ! Ca me met un message : problème avec le ThreadLoop().

    Ci-dessous mon code. Peut être que qqun pourrait m'aider. Merci d'avance.

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
            public Chauffe()
            {
                InitializeComponent();
     
                btn_exit.Enabled = false;
     
                // Déclaration et Instanciation du thread
                Thread myThread = new Thread(new ThreadStart(ThreadLoop));
     
                // Lancement du thread
                myThread.Start();
     
            }
     
            public void ThreadLoop()
            {
     
                int i = 0;
                int cp_bon = 1;
     
                byte[] buffer1 = new byte[1];
                DIO.SetPort(0);
                do
                {
                    Thread.Sleep(200);
                    DIO.ReadByte(buffer1);
                    Thread.Sleep(300);
     
                    if (buffer1[0].ToString() == "224" | buffer1[0].ToString() == "160")
                    {
                        cp_bon = cp_bon + 1;
                        i++;
                    }
                    else
                    {
                        cp_bon = 1;
                        i = 0;
                    }
     
                    // pour sortir
                    if (cp_bon == 5)
                        i = 20;
     
                    //MessageBox.Show("i = " + i.ToString() + " / buffer = " + buffer1[0].ToString() );
                }
                while(i < 10);
     
                ChangeForm();
            }
     
            public void ChangeForm()
            {
                // impossible d'effectuer cette tache !
                // conclusion il plante ici !
                btn_exit.Enabled = true;
     
            }

  2. #2
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    Si tu tentes de modifier ton "form" depuis un autre thread que celui qui l'a créé, tu auras un message d'exception.
    Tu dois passer par des callback pour que ça fonctionne.
    Concrètement, tu déclares un delegate, genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    delegate void MonCallBack(Parametre param /*si t'en as un*/);
    puis dans la method qui modifie ton form tu fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public void MethodQuiModifieLeForm(Parametre param/*si t'en as un*/)
    {
     if(monForm.InvokeRequired)
      {
         MonCallBack mcb = new MonCallBack(MethodQuiModifieLeForm);
         monForm.Invoke(mcb,new object[] {param /*toujours si necessaire*/});
      }
     else
      {
        //Execute le code normal que tu veux
      }
     
    }
    La où j'ai indiqué monForm, ça peut être le textBox que tu veux modifier ou quelque chose du genre.
    Si ça ne t'aide pas, pense à donner le message d'erreur. C'est plus facile de diagnostiquer avec.


  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Points : 30
    Points
    30
    Par défaut
    Merci beaucoup Sunsawe... ça marche

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

Discussions similaires

  1. problème avec thread
    Par remy8957 dans le forum Général Python
    Réponses: 4
    Dernier message: 15/09/2009, 09h57
  2. Problème avec threads après mise à jour
    Par issoram dans le forum Modules
    Réponses: 2
    Dernier message: 20/05/2009, 12h18
  3. Problème avec Thread et NotifyAll()
    Par Florianter dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 01/01/2009, 21h39
  4. Probléme avec Thread
    Par infoelectronique dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 06/10/2008, 14h48
  5. Problème avec Thread
    Par demcoul dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 16/03/2007, 11h53

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