5 using System.Reflection;
7 namespace SiliconStudio.Presentation.Core
12 private Delegate eventHandler;
13 private EventInfo eventInfo;
14 private object target;
18 ParameterInfo[] parameterInfos = eventInfo.EventHandlerType.GetMethod(
"Invoke").GetParameters();
20 if (parameterInfos.Length != 2)
21 throw new ArgumentException(
"The given event info must have exactly two parameters.");
23 Type argumentType = parameterInfos.Skip(1).First().ParameterType;
26 MethodInfo method = type.GetMethod(
"Handler");
28 anonymousHandler.Action = handler;
29 anonymousHandler.eventHandler = Delegate.CreateDelegate(eventInfo.EventHandlerType, anonymousHandler, method);
30 anonymousHandler.eventInfo = eventInfo;
31 anonymousHandler.target = target;
32 eventInfo.AddEventHandler(target, anonymousHandler.eventHandler);
34 return anonymousHandler;
39 handler.eventInfo.RemoveEventHandler(handler.target, handler.eventHandler);
48 internal class AnonymousEventHandler<TEventArgs> : AnonymousEventHandler where TEventArgs :
EventArgs
50 public void Handler(
object sender, TEventArgs e)
static void UnregisterEventHandler(AnonymousEventHandler handler)
static AnonymousEventHandler RegisterEventHandler(EventInfo eventInfo, object target, Action handler)