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 : 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
 
            // 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