C#에서 사용자 정의 이벤트를 제거하는 모든 방법
/// <summary>
///
/// </summary>
/// <typeparam name="T"> </typeparam>
/// <param name="obj"> </param>
/// <param name="eventName"> </param>
public static void RemoveEvent<T>(T obj, string eventName)
{
BindingFlags bindingFlags = BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static;
EventInfo[] eventInfo = obj.GetType().GetEvents(bindingFlags);
if (eventInfo == null)
{
return;
}
foreach (EventInfo info in eventInfo)
{
if (string.Compare(info.Name, eventName, StringComparison.OrdinalIgnoreCase) == 0)
{
FieldInfo fieldInfo = info.DeclaringType.GetField(info.Name, bindingFlags);
if (fieldInfo != null)
{
fieldInfo.SetValue(obj, null);
}
break;
}
}
}
테스트 코드;
PubFunction.RemoveEvent<BetchSettingValueForm>(this, "BeforeDictEntry");
//
MethodInfo method = valExtend.GetType().GetMethod(field.Element.LabelID + "_Extend");
if (method != null)
{
valExtend.gspState = GspState;
valExtend.dsMXJH = MXJH;
// method delegate
Delegate methodDel = PubFunction.CreateDelegateFromMethodInfo<BeforeDictEntryEventArgs<SmartHelpInfo>>(valExtend, method);
//
BeforeDictEntry += methodDel as EventHandler<BeforeDictEntryEventArgs<SmartHelpInfo>>;
}
#endregion
// ,
PubFunction.RemoveEvent<ButtonEdit>(helpEdit, "ButtonClick");
helpEdit.ButtonClick += helpEdit_ButtonClick;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.