"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como cancelar a inscrição de manipuladores de eventos Lambda em C#?

Como cancelar a inscrição de manipuladores de eventos Lambda em C#?

Postado em 2025-03-25
Navegar:837

How to Unsubscribe Lambda Event Handlers in C#?

Método para cancelar a inscrição do manipulador de eventos Lambda em C#

]

Em C#, as expressões Lambda Anonymous fornecem uma maneira conveniente de criar manipuladores de eventos. No entanto, um problema comum é: como remover ou cancelar a inscrição nesses manipuladores de eventos.

A especificação C# não garante que dois códigos tenham as mesmas expressões Lambda que produzem delegados iguais. Para garantir a inscrição bem -sucedida, é recomendável armazenar explicitamente instâncias delegadas.

use o método EventHandler nomeado

]

A maneira mais direta é definir um método e atribuí -lo como um manipulador de eventos:

public void ShowWoho(object sender, EventArgs e)
{
    MessageBox.Show("Woho");
}

...

button.Click  = ShowWoho;
...
button.Click -= ShowWoho;

armazenando variáveis ​​usando Delegate

]

Para criar um manipulador de eventos auto-removido usando uma expressão lambda, você pode usar a variável de armazenamento delegada:

EventHandler handler = null;
handler = (sender, args) =>
{
    button.Click -= handler; // 取消订阅
    // 在此处添加仅执行一次的代码
};
button.Click  = handler;

use o método Helper

Embora os métodos auxiliares não possam ser usados ​​para encapsular os manipuladores de eventos devido a limitações de representação de eventos, os delegados genéricos podem fornecer soluções:

button.Click  = Delegates.AutoUnsubscribe(
    (sender, args) =>
    {
        // 此处添加仅执行一次的代码
    },
    handler => button.Click -= handler);

Seguindo esses métodos, os desenvolvedores podem remover efetivamente os manipuladores de eventos Lambda, garantindo o gerenciamento e o controle de eventos adequados sobre o ciclo de vida da assinatura do evento.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3