2011-08-28 17 views
5

Sto provando a convertire un codice C# in VB.NET.Sottoscrivere eventi in VB.NET

Ho la seguente in C# (che funziona)

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

La linea chiave sto lottando per convertire correttamente è:

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

Quello che ho cercato è:

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

Nessuno dei due sta funzionando.

Il primo tentativo produce due errori, i primi VS2010 evidenzia sotto 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

e evidenziato sotto LoadNextImage() produce il seguente errore:

Error 3 Expression does not produce a value.

Il secondo tentativo produce la stesso errore:

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.

Come posso convertire il C# codice a VB.NET?

Grazie Ben

risposta

11

Iscrizione a eventi in VB.NET richiede o l'AddHandler o Maniglie parola chiave. Avrai anche un problema con lambda, la parola chiave Function richiede un'espressione che restituisca un valore. In VS2010 è possibile scrivere questo:

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

Nelle versioni precedenti, è necessario o modificare la LoadNextImage) dichiarazione di metodo (o usare un po 'di metodo di supporto privato con la firma corretta:

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