Bonjour,
Pour communiquer avec un module éthernet, j'utilise une librairie (dll + .cs) fourni par le constructeur.
Lorsqu'une des entrées du module change d'état je reçois un message via le socket de connexion (la communication est réalisé par la librairie et n'est donc transparente).
Pour se faire dans mon programme, il faut que je renseigne un delegate présente dans la classe de la librairie :
Dans mon programme je renseigne donc la librairie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part public delegate void pfnCALLBACK(InPtr data, UInt16[] wSize)
Evidemment je n'ai pas accès à mon "this" j'ai donc tenté d'utiliser des delegate mais pas de compilation possible :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 private static MX_CS.pfnCALLBACK g2KTCP = new MX_CS.pfnCALLBACK(M2K_getTcpMessage); //=================================================================== // Fonction de callback TCP public static void M2K_getTcpMessage(IntPtr bytData, UInt16 wSize) { // Traitement du message ... if (DI[1] == "ON") { PictureBox temp = (PictureBox)(this.Controls.Find("pictureBoxDI" + i.ToString(), true).FirstOrDefault()); temp.Image = imageON; } }
Comme c'est la première fois que j'utilise les delegate, je ne suis pas sûr d'avoir bien cerné leur fonctionnement si le problème vient de là.
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 public delegate void delegateChangeEtatDI(int i, bool etat); public void ChangeEtatDI(int i, bool etat) { PictureBox temp = (PictureBox)(this.Controls.Find("pictureBoxDI" + i.ToString(), true).FirstOrDefault()); if (temp != null) { if (etat) temp.Image = imageON; else temp.Image = imageOFF; } } //=================================================================== // Fonction de callback TCP public static void M2K_getTcpMessage(IntPtr bytData, UInt16 wSize) { // Traitement du message ... Invoke((delegateChangeEtatDI)ChangeEtatDI, i, true); }
C'est principalement pour faire un retour écran de l'état du module comme vous l'aurez compris.
Merci d'avance.
Partager