Llamar a un método cuando ocurre un evento genérico

Me enfrento a un problema al intentar implementar una llamada a un método activado por un evento que debe definirse durante el tiempo de ejecución. Encontré esta respuesta:

Redirigir a un método dinámico desde un controlador de eventos genérico

e implementé esa solución, pero sigo recibiendo una excepción cuando el método para llamar es una instancia, no estática. Aquí está mi código parcial:

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;
    }

}

No puedo encontrar una manera de deshacerme de esa excepción, el código funciona bien si apagoEstablecer bandera() método estático, pero eso no es lo que necesito. Cualquier sugerencia será muy apreciada. Gracias por adelantado.

Respuestas a la pregunta(1)

Su respuesta a la pregunta