Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La expresión lambda no se quitará de este controlador de eventos. Asigne la expresión lambda a una variable y use la variable para agregar y quitar el evento.
Cuando se usan expresiones lambda con controladores de eventos, es posible que no vea el comportamiento esperado. El compilador genera un nuevo método para cada definición de expresión lambda, incluso si son idénticos. Por lo tanto, el código siguiente muestra False.
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
Cuando se usan expresiones lambda con controladores de eventos, esto puede provocar resultados inesperados. En el ejemplo siguiente, la instrucción no quita la expresión lambda agregada por AddHandler .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
De forma predeterminada, este mensaje es una advertencia. Para obtener más información sobre cómo ocultar advertencias o tratar advertencias como errores, vea Configurar advertencias en Visual Basic.
Identificador de error: BC42326
Para corregir este error
Para evitar la advertencia y quitar la expresión lambda, asigne la expresión lambda a una variable y use la variable en las AddHandler instrucciones y RemoveHandler , como se muestra en el ejemplo siguiente.
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