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!
fonte
2013-07-07 10:13:14
grazie mille! risposta esaustiva e molto chiara! :) – sharkyenergy
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
@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