Appel d'un delegate de control avec une methode dynamique
Bonsoir,
J'aurais une 'petite' question...
J’écris un code pour ajouter une méthode dynamique a un évènement.
- La méthode dynamique appelle une autre méthode ("Raise") avec cette signature "public void Raise(params object[] param);"
Voici la partie du code qui s'occupe de ça...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
// get event info
eventInfo= o.GetType().GetEvent(EventName);
MethodInfo mid = eventInfo.EventHandlerType.GetMethod("Invoke");
ParameterInfo[] paraminfo = mid.GetParameters();
List<Type> paramtype = new List<Type>();
paramtype.Add(GetType());
foreach (ParameterInfo t in paraminfo) { paramtype.Add(t.ParameterType); }
// get Raise local methode info
MethodInfo raise = GetType().GetMethod("Raise");
// DynamicMethod
DynamicMethod dm = new DynamicMethod("LocalRaiseEvent", mid.ReturnType, paramtype.ToArray(), GetType().Module/*_oevent.Module/*,raise.Module*/);
ILGenerator ilg = dm.GetILGenerator();
for (int bc = 0; bc < paramtype.Count; bc++) {
ilg.Emit(OpCodes.Ldarg, bc);
}
ilg.Emit(OpCodes.Call, raise);
ilg.Emit(OpCodes.Ret);
// Add
_oevent.AddEventHandler(o, dm.CreateDelegate(eventInfo.EventHandlerType, this)); |
Si l’évènement d'origine vient d'une classe que j'ai crée cela passe très bien, par contre si je prends un Control (une form par exemple) une exception estlevée "InvalidProgramException- Le compilateur JIT a rencontré une limitation interne"
Il y aurait il des idées du pourquoi j'ai cette erreur et surtout comment l'eviter?
Merci