c#
에서 Lambda 이벤트 핸들러에서 구독을 취소하는 메소드C#에서 익명 Lambda 표현식은 이벤트 처리기를 만드는 편리한 방법을 제공합니다. 그러나 일반적인 문제는 다음과 같습니다. 이러한 이벤트 핸들러를 제거하거나 구독하지 않는 방법입니다.
C# 사양은 두 코드가 동등한 대의원을 생성하는 동일한 Lambda 표현을 가지고 있음을 보장하지 않습니다. 성공적인 구독을 보장하려면 위임 된 인스턴스를 명시 적으로 저장하는 것이 좋습니다.
명명 된 이벤트 핸들러 메소드를 사용합니다
]가장 직접적인 방법은 메소드를 정의하고 이벤트 핸들러로 할당하는 것입니다 :
public void ShowWoho(object sender, EventArgs e)
{
MessageBox.Show("Woho");
}
...
button.Click = ShowWoho;
...
button.Click -= ShowWoho;
Delegate
를 사용하여 변수 저장 변수 저장.]Lambda 표현식을 사용하여 자체 감동된 이벤트 핸들러를 만들려면 Delegate Storage 변수를 사용할 수 있습니다 :
EventHandler handler = null;
handler = (sender, args) =>
{
button.Click -= handler; // 取消订阅
// 在此处添加仅执行一次的代码
};
button.Click = handler;
헬퍼 메소드 사용
이벤트 표현 제한으로 인해 이벤트 핸들러를 캡슐화하는 데 헬퍼 방법을 사용할 수는 없지만 일반 대표는 솔루션을 제공 할 수 있습니다.
button.Click = Delegates.AutoUnsubscribe(
(sender, args) =>
{
// 此处添加仅执行一次的代码
},
handler => button.Click -= handler);
이러한 방법을 따르면 개발자는 Lambda 이벤트 처리기를 효과적으로 제거하여 적절한 이벤트 관리 및 이벤트 구독 라이프 사이클을 제어 할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3