参考:https://www.cnblogs.com/fangxiao/archive/2011/08/11/2134623.html
class Class1
{
#region 帮助委托
/// <summary>
/// 移除所有注册事件 移除类 的名为eventname 的委托
/// </summary>
public static void RemoveAllEvent(object _class, string eventname)
{
var newType = _class.GetType();
foreach (var item in newType.GetEvents())
{
if (eventname == item.Name)
{
GameLogger.Logger.Info($"RemoveAllEvent : EventName={item.Name}");
FieldInfo _Field = newType.GetField(item.Name, BindingFlags.Instance | BindingFlags.NonPublic);
if (_Field != null)
{
object _FieldValue = _Field.GetValue(_class);
if (_FieldValue != null && _FieldValue is Delegate)
{
Delegate _ObjectDelegate = (Delegate)_FieldValue;
Delegate[] invokeList = _ObjectDelegate.GetInvocationList();
if (invokeList != null)
{
GameLogger.Logger.Info($"RemoveAllEvent : EventNameinvokeList={invokeList.Length}");
foreach (Delegate del in invokeList)
{
GameLogger.Logger.Info($"RemoveAllEvent : del={del.Method.ToString()}");
item.RemoveEventHandler(_class, del);
}
}
}
}
}
}
}
#endregion
}