Es gibt zwei verschiedene Möglichkeiten, Ereignisbehandlungsmethoden mit einem Ereignis in VB.NET zu verknüpfen.
Bei der ersten wird das Schlüsselwort Handles
verwendet, das Sie an das Ende der Definition der Event-Handler-Methode anhängen. Zum Beispiel:
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
Die erste Methode ist viel einfacher, wenn Sie bereits separat sowieso Event-Handler-Methoden definiert wurden (das heißt, wenn Sie nicht eine Lambda-Syntax). Ich würde es empfehlen, wann immer es möglich ist.
Die zweite beinhaltet die explizite Verwendung der AddHandler
-Anweisung, genau wie +=
in C#. Dies ist die, die Sie verwenden müssen, wenn Sie Ereignishandler dynamisch, z. wenn Sie sie zur Laufzeit ändern müssen. So Ihr Code, buchstäblich umgewandelt, würde wie folgt aussehen:
Dim ftpClient As New FtpClient()
AddHandler ftpClient.UploadProgressChanged, AddressOf ftpClient_UploadProgressChanged
AddHandler ftpClient.UploadFileCompleted, AddressOf ftpClient_UploadFileCompleted
Wie du gesagt hast, habe ich versucht, den Code durch Developer Fusion's converter laufen und war überrascht zu sehen, dass sie ungültig VB.NET-Code zurückkehrten:
' WRONG CODE!
Dim ftpClient As New FtpClient()
ftpClient.UploadProgressChanged += New EventHandler(Of UploadProgressChangedLibArgs)(ftpClient_UploadProgressChanged)
ftpClient.UploadFileCompleted += New EventHandler(Of UploadFileCompletedEventLibArgs)(ftpClient_UploadFileCompleted)
Stellt sich heraus, das ist a known bug, die es wert sein könnte, zu wählen!
vielen Dank! erschöpfende Antwort und sehr klar! :) – sharkyenergy
ich bekomme diesen Fehler jetzt, was bedeutet das? danke Fehler Handles-Klausel erfordert eine WithEvents-Variable, die im enthaltenden Typ oder einem seiner Basistypen definiert ist. – sharkyenergy
@Justme Verwenden Sie das Handles-Schlüsselwort am Ende einer Prozedurdeklaration, damit es Ereignisse behandelt, die von einer Objektvariablen ausgelöst werden mit dem Schlüsselwort ** WithEvents ** deklariert. http://msdn.microsoft.com/library/vstudio/6k46st1y – Chris