Rufe eine Methode auf, wenn ein generisches Ereignis auftritt

Beim Versuch, einen Aufruf einer Methode zu implementieren, die von einem Ereignis ausgelöst wurde, das zur Laufzeit definiert werden sollte, ist ein Problem aufgetreten. Ich habe diese Antwort gefunden:

Umleitung zu einer dynamischen Methode von einem generischen Ereignishandler

und implementiert diese Lösung, aber ich bekomme immer wieder eine Ausnahme, wenn die aufzurufende Methode eine Instanz ist, nicht statisch. Hier ist mein Teilcode:

public class Operation
{
    public bool EventFired 
    {
        get { return _eventFired; }
    }

    private bool _eventFired = false;

    public void Execute(object source, string EventName)
    {
        EventInfo eventInfo = source.GetType().GetEvent(EventName);
        Delegate handler = null;

        Type delegateHandler = eventInfo.EventHandlerType;
        MethodInfo invokeMethod = delegateHandler.GetMethod("Invoke");
        ParameterInfo[] parms = invokeMethod.GetParameters();

        Type[] parmTypes = new Type[parms.Length];

        for (int i = 0; i < parms.Length; i++)
            parmTypes[i] = parms[i].ParameterType;

        DynamicMethod customMethod = new DynamicMethod
            (
            "TempMethod",
            invokeMethod.ReturnType,
            parmTypes,
            typeof (Operation).Module
            );

        MethodInfo inf = typeof (Operation).GetMethod("SetFlag", BindingFlags.Instance | BindingFlags.Public);

        ILGenerator ilgen = customMethod.GetILGenerator();
        ilgen.Emit(OpCodes.Ldarg_0);
        ilgen.Emit(OpCodes.Call, inf);
        ilgen.Emit(OpCodes.Ret);

        //handler = _customMethod.CreateDelegate(delegateHandler);          // This works if I change SetFlag() to static 

        handler = customMethod.CreateDelegate(delegateHandler, this);       // I get an ArgumentException at this point: 
                                                                            //Cannot bind to the target method because its signature 
                                                                            //or security transparency is not compatible with that of the delegate type.   



        eventInfo.AddEventHandler(source, handler);
    }

    /// <summary>Signals that the event has been raised.</summary>
    public void SetFlag()
    {
        _eventFired = true;
    }

}

Ich kann keine Möglichkeit finden, diese Ausnahme zu beseitigen. Der Code funktioniert einwandfrei, wenn ich mich an @ wendSetFlag () Methode zu statisch, aber das ist nicht was ich brauche. Anregungen wäre sehr dankbar. Danke im Voraus

Antworten auf die Frage(2)

Ihre Antwort auf die Frage