BC42326: a expressão Lambda não será removida deste manipulador de eventos

A expressão Lambda não será removida desse manipulador de eventos. Atribua a expressão lambda a uma variável e use a variável para adicionar e remover o evento.

Quando expressões lambda são usadas com manipuladores de eventos, talvez você não veja o comportamento esperado. O compilador gera um novo método para cada definição de expressão lambda, mesmo que elas sejam idênticas. Portanto, o código a seguir é Falseexibido.

Module Module1

    Sub Main()
        Dim fun1 As ChangeInteger = Function(p As Integer) p + 1
        Dim fun2 As ChangeInteger = Function(p As Integer) p + 1
        Console.WriteLine(fun1 = fun2)
    End Sub

    Delegate Function ChangeInteger(ByVal x As Integer) As Integer

End Module

Quando expressões lambda são usadas com manipuladores de eventos, isso pode causar resultados inesperados. No exemplo a seguir, a expressão lambda adicionada AddHandler não é removida pela instrução RemoveHandler .

Module Module1

    Event ProcessInteger(ByVal x As Integer)

    Sub Main()

        ' The following line adds one listener to the event.
        AddHandler ProcessInteger, Function(m As Integer) m

        ' The following statement searches the current listeners
        ' for a match to remove. However, this lambda is not the same
        ' as the previous one, so nothing is removed.
        RemoveHandler ProcessInteger, Function(m As Integer) m

    End Sub
End Module

Por padrão, essa mensagem é um aviso. Para obter mais informações sobre como ocultar avisos ou tratar avisos como erros, consulte Configurando avisos no Visual Basic.

ID do erro: BC42326

Para corrigir este erro

Para evitar o aviso e remover a expressão lambda, atribua a expressão lambda a uma variável e use a variável nas instruções e RemoveHandler nas AddHandler instruções, conforme mostrado no exemplo a seguir.

Module Module1

    Event ProcessInteger(ByVal x As Integer)

    Dim PrintHandler As ProcessIntegerEventHandler

    Sub Main()

        ' Assign the lambda expression to a variable.
        PrintHandler = Function(m As Integer) m

        ' Use the variable to add the listener.
        AddHandler ProcessInteger, PrintHandler

        ' Use the variable again when you want to remove the listener.
        RemoveHandler ProcessInteger, PrintHandler

    End Sub
End Module

Consulte também