public static void ClearAllEvents(object objectHasEvents){
var events = objectHasEvents.GetType().GetEvents();
if (events == null || events.Length < 1)
{
return;
}
foreach (var info in events)
{
ClearEvents(objectHasEvents,info.Name);
}
}
public static void ClearEvents(object objectHasEvents, string eventName)
{
if (objectHasEvents == null)
{
return;
}
Delegate[] invokeList = GetObjectEventList(objectHasEvents, eventName);
if (invokeList != null)
{
Type t = objectHasEvents.GetType();
foreach (Delegate del in invokeList)
{
t.GetEvent(eventName).RemoveEventHandler(objectHasEvents, del);
}
}
}
private static Delegate[] GetObjectEventList(object p_Object, string p_EventName)
{
FieldInfo _Field = p_Object.GetType().GetField(p_EventName, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static);
if (_Field == null)
{
return null;
}
object _FieldValue = _Field.GetValue(p_Object);
if (_FieldValue != null && _FieldValue is Delegate)
{
Delegate _ObjectDelegate = (Delegate)_FieldValue;
return _ObjectDelegate.GetInvocationList();
}
return null;
}