2013-07-07 9 views
6

Ho il seguente codice che ho bisogno di convertire in VB.NET. Il problema è che tutti gli strumenti di traduzione che ho trovato stanno convertendo la parte add-handler errata. Non mi sembra di essere in grado di farlo da solo.Sintassi per l'aggiunta di un gestore di eventi in VB.NET

FtpClient ftpClient = new FtpClient(); 
ftpClient.UploadProgressChanged += new EventHandler<UploadProgressChangedLibArgs>(ftpClient_UploadProgressChanged); 
ftpClient.UploadFileCompleted += new EventHandler<UploadFileCompletedEventLibArgs>(ftpClient_UploadFileCompleted); 

risposta

10

Esistono due modi diversi per associare i metodi del gestore eventi a un evento in VB.NET.

Il primo riguarda l'utilizzo della parola chiave Handles, che si aggiunge alla fine della definizione del metodo del gestore di eventi. Per esempio:

Sub ftpClient_UploadProgressChanged(sender As Object, e As UploadProgressChangedLibArgs) Handles ftpClient.UploadProgressChanged 
    ' ... 
End Sub 

Sub ftpClient_UploadFileCompleted(sender As Object, e As UploadFileCompletedEventLibArgs) Handles ftpClient.UploadFileCompleted 
    ' ... 
End Sub 

Il primo metodo è molto più semplice se hai già definito separatamente metodi del gestore di eventi in ogni caso (vale a dire, se non si sta utilizzando una sintassi lambda). Lo raccomanderei quando possibile.

Il secondo riguarda l'uso esplicito dell'istruzione AddHandler, proprio come += in C#. Questo è quello che è necessario utilizzare se si desidera associare i gestori di eventi dinamicamente a, ad es. se è necessario modificarli in fase di esecuzione. Così il vostro codice, letteralmente trasformata, sarebbe simile a questa:

Dim ftpClient As New FtpClient() 
AddHandler ftpClient.UploadProgressChanged, AddressOf ftpClient_UploadProgressChanged 
AddHandler ftpClient.UploadFileCompleted, AddressOf ftpClient_UploadFileCompleted 

Come hai detto tu, ho provato a fare funzionare il codice attraverso Developer Fusion's converter e sono rimasto sorpreso di vedere che stavano tornando codice VB.NET valido:

' WRONG CODE! 
Dim ftpClient As New FtpClient() 
ftpClient.UploadProgressChanged += New EventHandler(Of UploadProgressChangedLibArgs)(ftpClient_UploadProgressChanged) 
ftpClient.UploadFileCompleted += New EventHandler(Of UploadFileCompletedEventLibArgs)(ftpClient_UploadFileCompleted) 

Risulta, è a known bug che potrebbe valer la pena di votare!

+0

grazie mille! risposta esaustiva e molto chiara! :) – sharkyenergy

+0

sto ricevendo questo errore ora, cosa significa? grazie 'Errore La clausola Handles richiede una variabile WithEvents definita nel tipo di contenuto o in uno dei suoi tipi di base. – sharkyenergy

+1

@Justme Utilizzare la parola chiave Handles al termine di una dichiarazione di procedura per far sì che gestisca gli eventi generati da una variabile oggetto dichiarato utilizzando la parola chiave ** WithEvents **. http://msdn.microsoft.com/library/vstudio/6k46st1y – Chris

Problemi correlati