{
internal class AddEvent : Operation
{
- public AddEvent(GlobalDataList globalDataList, int instanceIndex, int elementIndex, int eventIndex, int valueIndex)
+ public AddEvent(GlobalDataList globalDataList, List<object> operationInfo)
{
- this.instanceIndex = instanceIndex;
- this.elementIndex = elementIndex;
- this.eventIndex = eventIndex;
- this.valueIndex = valueIndex;
+ instanceIndex = (int)operationInfo[0];
+ elementIndex = (int)operationInfo[1];
+ eventIndex = (int)operationInfo[2];
+ valueIndex = (int)operationInfo[3];
this.globalDataList = globalDataList;
}
try
{
var methodInfo = globalDataList.GatheredMethods[valueIndex];
- eventInfo.AddEventHandler(instance, methodInfo.CreateDelegate(eventInfo.EventHandlerType, element));
+ Delegate eventDelegate = null;
+
+ if (methodInfo.IsStatic)
+ {
+ eventDelegate = methodInfo.CreateDelegate(eventInfo.EventHandlerType);
+ }
+ else
+ {
+ eventDelegate = methodInfo.CreateDelegate(eventInfo.EventHandlerType, element);
+ }
+
+ if (null != eventDelegate)
+ {
+ eventInfo.AddEventHandler(instance, eventDelegate);
+ globalDataList.RemoveEventOperations.Add(new RemoveEvent(eventDelegate, instance, eventInfo));
+ }
+ else
+ {
+ throw new Exception($"Can't create delegate for method {methodInfo.DeclaringType.FullName}.{methodInfo.Name}");
+ }
}
catch (ArgumentException ae)
{