bonjour à tous, je rencontre des difficultés pour mettre en place des thread pour ma méthode codeurvaleur de la classe Codeur afin que celui-ci tourne quand il est appelé.
Plus tard, la valeur fournit par codeurvaleur sera afficher par un afficheur lui aussi tournant en boucle avec un thread tout les 0.5 seconde voir 1 seconde. Les méthode doivent pouvoir tourner tous les 0.5 secondes en fond sans gêner d'autre tâche et lancer d'autre méthode ...
J'ai déjà suivie plusieurs tuto et astuce, mais impossible de faire fonctionner.

-----------------------------------------------------------------------------------------
Classe Capteur.cs

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
namespace Capteur
{
    class Capteur : noeud_can
    {
        private int ValeurCapteurFinal;
 
        public int ValeurcapteurFinal
        { get { return ValeurCapteurFinal; } }
 
        //constructeur par defaut 
        public Capteur(string nom_peripherique, UInt16 numero_noeud)
              : base(nom_peripherique, numero_noeud)
          {
          }
 
        public void capteurvaleur()
        {
            //COB ID
            uint COB_ID_emission_sdo = (uint)0x600 + numero_noeud;
            uint COB_ID_reception_sdo = (uint)0x580 + numero_noeud;
 
            Console.WriteLine("debut de la capture");
            // Envoie de la trame pour lire l'entrée analogique numéro 2 du variateur
            // 0x40  -  Read Request = requête de lecture d'un paramètre du variateur  
            // 5fe3 - affichage de la tension d'entrée aux entrées analogiques
            // plage d'affichage du capteur : -10.00 a +10.00 
            // 0x02  -  tension d'entrée AIN2
            envoyer_trame(COB_ID_emission_sdo, 8, 0x40, 0xe3, 0x5f, 0x02, 0x0, 0x0, 0x0, 0x0);
            Console.WriteLine("\nenvoi de la trame de lecture de la valeur d'entrée");
            Thread.Sleep(100);
 
            //Trame réponse du variateur
            //recevoir_trame(COB_ID_reception_sdo, 8);
            TPCANMsg message_reponse;
            message_reponse = recevoir_trame(COB_ID_reception_sdo, 8);
            Thread.Sleep(100);
 
            #region conversion
            string disthexa = message_reponse.DATA[5].ToString("X");  
            string disthexa2 = disthexa + message_reponse.DATA[4].ToString("X"); 
            int intAgain = int.Parse(disthexa2, System.Globalization.NumberStyles.HexNumber);
            Console.WriteLine(intAgain);
 
            int ValeurDivision = (intAgain * 2);
            this.ValeurCapteurFinal = (ValeurDivision / 10);
            Console.WriteLine("La distance est de {0} mm", this.ValeurCapteurFinal);
            /*int ValeurTraitement = (ValeurDivision / 10);
            Console.WriteLine("La distance est de {0} mm", ValeurTraitement);*/
 
            #endregion
        }
    }
}
---------------------------------------------------------------------------------------------
Classe Codeur.cs
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
59
60
61
62
63
64
65
66
67
68
69
70
71
namespace Codeur
{
    class Codeur : noeud_can
    {
        private int ValeurCodeurFinal;
 
        public int ValeurcodeurFinal
        { get { return ValeurCodeurFinal; } }
 
        //constructeur par defaut 
        public Codeur(string nom_peripherique, UInt16 numero_noeud)
              : base(nom_peripherique, numero_noeud)
          {
          }
 
        public void codeurvaleur(Capteur capteur)
        {
            //var grid = (Capteur)capteur;
            if ((capteur.ValeurcapteurFinal != 0))
            {
                //Console.WriteLine("ValeurCapteur{0}", capteur.ValeurcapteurFinal);
                //Console.ReadKey();
 
                //COB ID
                uint COB_ID_emission_sdo = (uint)0x600 + numero_noeud;
                uint COB_ID_reception_sdo = (uint)0x580 + numero_noeud; 
 
                Console.WriteLine("debut de la capture");
       //Envoie de la trame pour lire l'entrée analogique numéro 2 du variateur
       //0x40 - requête de lecture d'un paramètre du variateur     64 en décimal    4 octets
      //5cbd - affichage de valeurs d'entrée 32 bits de différents blocs en [incréments]
        // plage d'affichage du capteur : -2147483647 a +2147483647   
        // 0x5 - sous index 5  MCTRL: dn PosSetValue_p
           envoyer_trame(COB_ID_emission_sdo, 8, 0x40, 0xbd, 0x5c, 0x05, 0x0, 0x0, 0x0, 0x0);
                Console.WriteLine("\nenvoi de la trame de lecture de la valeur d'entrée");
                Thread.Sleep(100);
 
                //Trame réponse du variateur
                //recevoir_trame(COB_ID_reception_sdo, 8);
                TPCANMsg message_reponse;
                message_reponse = recevoir_trame(COB_ID_reception_sdo, 8);
                Thread.Sleep(100);
 
                #region Conversion valeur codeur
                string disthexa = message_reponse.DATA[7].ToString("X2");
                string disthexa2 = disthexa + message_reponse.DATA[6].ToString("X2");
 
         int intAgain = int.Parse(disthexa2, System.Globalization.NumberStyles.HexNumber);
 
                Console.WriteLine(intAgain);
                int tour = (intAgain);     // Mise a l'échelle : 65535 = 1 tour
                double tourcodeur = (tour * 0.2);
                Console.WriteLine("Nombres de tours : " + tour);
                Console.WriteLine("nombres de centimètre : {0}", tourcodeur);
                #endregion
 
                #region Valeur pour afficheur (calcule)
 
                double ResultatCapteurCodeur = (capteur.ValeurcapteurFinal - tourcodeur);
                this.ValeurCodeurFinal = Convert.ToInt32(ResultatCapteurCodeur);
                Console.WriteLine("La distance restant est de {0} mm", ValeurCodeurFinal);
 
                #endregion
            }
            else
            {
                Console.WriteLine("ValeurcapteurFinal n'a pas la bonne valeur !");
            }
        }
    }
}
---------------------------------------------------------------------------------------------
Programclasse.cs
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
namespace Programme
{
    class Programsansclasse
    {
        static void Main(string[] args)
        {
            #region Fonctionnement
 
            #region Capteur
            Capteur CAPTEUR = new Capteur("UPK 500 POR", 1);
            #endregion
 
            CAPTEUR.capteurvaleur();   //Fonctionnement du capteur
            Thread.Sleep(5000);
 
            #region Afficheur
            Afficheur AFFICHEUR = new Afficheur("CA340", 2);
            #endregion
 
            AFFICHEUR.CapteurValeurAfficheur(CAPTEUR);
 
            Thread.Sleep(5000);
 
            #region Codeur
            Codeur CODEUR = new Codeur("Codeur variateur", 1);
            #endregion
 
            Thread.Sleep(5000);
 
            // Create the thread object, passing in the CODEUR.codeurvaleur(CAPTEUR) method
            // via a ThreadStart delegate. This does not start the thread.
       var CapteurBoucle = new Thread(new ParameterizedThreadStart(CAPTEUR.capteurvaleur()));
            //Start the thread
            CapteurBoucle.Start();
 
            Thread.Sleep(50);
            #endregion
            Console.ReadKey();
        }
    }
}
----------------------------------------------------
L'erreur produit est celle-ci:
Erreur 1 Nom de méthode attendu ...\....\Programclasse.cs 84 73 Afficheur-capteur

ligne de l'erreur :
var CapteurBoucle = new Thread(new ParameterizedThreadStart(CAPTEUR.capteurvaleur()));