이벤트에서 EventHandler를 올바르게 분리하면 약간의 문제가 있습니다. 있는 UIButton에이벤트 분리 (C#)
: 홈페이지에서
public void HookEvent(Action<object, EventArgs> action)
{
Click += new EventHandler(action);
}
public void UnhookEvent(Action<object, EventArgs> action)
{
Click -= new EventHandler(action);
}
:
UIButton button = new Button();
button.HookEvent(OnButtonClick);
button.UnhookEvent(OnButtonClick);
중독되는 기능 :
public void OnButtonClick(object sender, EventArgs e)
{
throw new Exception("Event Fired");
}
가 나는 경우이를 사용하여 여기에 내가 함께 일하고 무엇인가 Unhook 줄을 주석 처리하여 제대로 처리되고 Exception이 호출됩니다. 그러나 위의 그림과 같이 Unhook을 그대로두면 함수가 계속 실행됩니다. 그것은 그것을 언 후크하지 않습니다. Click -= new EventHandler(action);
부분 아래에 Click = null;
을 추가하면 예상대로 작동합니다. 이렇게하면 한 번에 하나의 함수 만 연결할 수 있습니다.
무슨 일이 일어날 수 있는지에 대한 유일한 생각은 내가 액션 <>과 함께 작업하고 있기 때문에 새로운 버전의 함수가 전달된다는 것입니다.하지만 슬프게도 버튼 내부 변수로 함수를 저장하려고 시도했습니다. 그것을 제거하기 위해 갔다, if(storedAction == passedInAction)
사실에있는 결과. 나는 이것이 나를 위해 분리되지 않는 이유를 전혀 모른다.
시간 내 주셔서 감사합니다!
서로 다른 이벤트에 의해 트리거 된 이벤트 구독/가입 취소를 구분할 것입니다. 하나의 버튼 클릭으로 두 이벤트 처리기를 모두 호출하는 것이 혼란 스럽습니다. –
왜 이러한 함수 ('HookEvent','UnhookEvent')가 실제로 - 호출자는 이벤트에 가입하기 위해'+ ='(** 표준 **) 구문을 직접 사용합니까? –
'new Button()'이 항상 올바른 시나리오는 없습니다. 적절한 버튼 컨트롤 참조를 사용해야하며 처음부터 새 컨트롤을 만들지 않아야합니다. –