2011-08-28 21 views
5

Estoy tratando de convertir algunos códigos C# a VB.NET.Eventos de suscripción en VB.NET

tengo el siguiente en C# (que funciona)

m_switchImageTimer = new DispatcherTimer(); 
m_switchImageTimer.Interval = Interval; 
m_switchImageTimer.Tick += (s, e) => LoadNextImage(); 

La línea clave Estoy luchando para convertir con éxito es:

m_switchImageTimer.Tick += (s, e) => LoadNextImage(); 

Lo que he intentado es:

m_switchImageTimer.Tick += Function(s, e) LoadNextImage() 
m_switchImageTimer.Tick += New EventHandler(AddressOf LoadNextImage) 

Ninguno de estos están funcionando.

El primer intento produce dos errores, los primeros Destacados VS2010 bajo m_switchImageTimer.Tick:

Error 1 'Public Event Tick(sender As Object, e As System.EventArgs)' is an event, and cannot be called directly. Use a 'RaiseEvent' statement to raise an event

y destacó bajo LoadNextImage() produce el error siguiente:

Error 3 Expression does not produce a value.

El segundo intento produce la mismo error:

Error 1 'Public Event Tick(sender As Object, e As System.EventArgs)' is an event, and cannot be called directly. Use a 'RaiseEvent' statement to raise an event.

¿Cómo puedo convertir la C# código a VB.NET?

Gracias Ben

Respuesta

11

La suscripción a eventos en VB.NET requiere o bien la AddHandler o manijas de palabras clave. También tendrá un problema con el lambda, la palabra clave Function requiere una expresión que devuelva un valor. En VS2010 puede escribir esto:

AddHandler m_switchImageTimer.Tick, Sub(s, e) LoadNextImage() 

En versiones anteriores, es necesario o bien cambiar el LoadNextImage() declaración de método o usar un método poco de ayuda privado con la firma correcta:

AddHandler m_switchImageTimer.Tick, AddressOf SwitchImageTimer_Tick 
... 
Private Sub SwitchImageTimer_Tick(sender As Object, e As EventArgs) 
    LoadNextImage() 
End Sub 
Cuestiones relacionadas