CreateDelegate, delegate et gestion des evenements

CreateDelegate, delegate et gestion des evenements - C#/.NET managed - Programmation

Marsh Posté le 08-09-2005 à 10:05:55    

Bonjour à tous  :jap:  
 
J'ai un petit problème concernant la gestion de delegate sur des eventHandler.
 
Explication :
 
Je charge dynamiquement dans un fichier common.cs (classe baseClass) une assembly (chargement dynamique car l'assembly chargée dépendra d'un choix effectué dans baseClass)
 
Je charge donc le tout :
 

Code :
  1. Assembly  DriverAssembly
  2. Type       typeDriver
  3. Object    DriverSerie
  4. DriverAssembly = Assembly.LoadFrom(MyAssembliesPath + MyAssembliesName+ ".dll" );
  5. typeDriver       =  DriverAssembly.GetType(MyAssembliesName + MyLoadedClass);
  6. DriverSerie      = Activator.CreateInstance(typeDriver);


 
Je recherche ensuite les méthodes qui m'interessent dans cette assembly, par exemple "write", en spécifiant les parametres de la fonction
 

Code :
  1. MethodInfo      Write
  2. Type[] paramWrite = new Type[1];
  3. paramWrite1[0]    = typeof(string);
  4. WriteHandler      = typeDriver.GetMethod("Write",paramWrite);


 
Ici, c'est OK. Ca fonctionne, lorsque j'execute le tout ma fonction "Write" pointe bien sur celle de l'assembly.
 
Maintenant, je veux aussi charger non pas une méthode mais des eventHandler et events.
Et là c'est un échec.
 
J'ai procédé de manière similaire

Code :
  1. EventInfo Evt_RecptHandler;                                     // EventInfo au lieu de MethodInfo
  2. Evt_RecptHandler = typeDriver.GetEvent("Evt_Recpt" ); // chargement de l'evenement "Evt_Recpt"


 
Je veux ensuite faire un "AddEventHandler" sur "Evt_RecptHandler".
Les parametres de "AddEventHandler" sont :
- <object target> : source de l'evenement -> je donne en parametre mon "DriverSerie" (voir plus haut)
- <System.Delegate handler> : méthodes qui sont appellées lorsque la cible déclenche l'evenement
J'ai donc un truc du genre :

Code :
  1. Evt_RecptHandler.AddEventHandler(DriverSerie,handler); // pour le handler, cf ci dessous !


 
Et c'est là que le bas blesse, sur ce dernier parametre "handler".
 
En effet je tente de recuperer mon handler :
 

Code :
  1. Delegate handler
  2. handler = Delegate.CreateDelegate(Evt_RecptHandler.EventHandlerType,this,"SerialDriver_DataReceived" );


 
Compil ok, mais à l'execution une bien belle exception :"{"Erreur de liaison avec la méthode cible." }"
 
Voila, si qq a déja trempé dans les delegate et à une idée à ce sujet, je suis prenneur  :)  
 
 :hello:  :hello:  
 
 
 
 
 

Reply

Marsh Posté le 08-09-2005 à 10:05:55   

Reply

Marsh Posté le 08-09-2005 à 11:20:07    

En poussant un peu le probleme vient de la déclaration de ma fonction "SerialDriver_DataReceived".  :jap:  
 
J'ai essayé une surcharge de  

Code :
  1. Delegate.CreateDelegate(Evt_RecptHandler.EventHandlerType,this,"SerialDriver_DataReceived" );


 
qui a la place de "this" (instance de la classe contenant la fonction) prend un MethodInfo de la fonction cible.
 
Ainsi j'ai tenté

Code :
  1. MethodInfo inf = this.GetType().GetMethod("SerialDriver_DataReceived" )
  2. Delegate.CreateDelegate(Evt_RecptHandler.EventHandlerType,inf);


 
Compil Ok, et en compilant le code je m'appercois que mon "inf" ne prends aucune valeur  :heink:  
Pris d'un doute, je déclare donc ma fct "SerialDriver_DataReceived" en "public".
 
Et là le "inf" est correctement initialisé  :love: , mais autre erreur au niveau du CreateDelegate qui demande une fonction static :pfff: .
Qu'à cela ne tienne, je passe ma fct "SerialDriver_DataReceived" en "public" et "static"  :ange: .
Mais là, le drame  :??:  je retombe sur un inf qui ne s'initialise pas  :sweat:  :sweat:  :sweat:  
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed