"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > C#에서 Lambda 이벤트 핸들러를 구독하는 방법?

C#에서 Lambda 이벤트 핸들러를 구독하는 방법?

2025-03-25에 게시되었습니다
검색:651

How to Unsubscribe Lambda Event Handlers in C#?

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