在 VB.NET 中有两种不同的方法可以将事件处理程序方法与事件相关联。
第一个涉及使用Handles
关键字,您将其附加到事件处理程序方法定义的末尾。例如:
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
如果您已经拥有单独定义的事件处理程序方法(即,如果您不使用 lambda 语法),则第一种方法要简单得多。我会尽可能推荐它。
第二个涉及显式使用AddHandler
语句,就像+=
在 C# 中一样。如果您想动态关联事件处理程序,例如,如果您需要在运行时更改它们,则需要使用此方法。所以你的代码,字面转换,看起来像这样:
Dim ftpClient As New FtpClient()
AddHandler ftpClient.UploadProgressChanged, AddressOf ftpClient_UploadProgressChanged
AddHandler ftpClient.UploadFileCompleted, AddressOf ftpClient_UploadFileCompleted
正如您所说,我尝试通过Developer Fusion 的转换器运行您的代码,并惊讶地发现它们返回了无效的 VB.NET 代码:
' WRONG CODE!
Dim ftpClient As New FtpClient()
ftpClient.UploadProgressChanged += New EventHandler(Of UploadProgressChangedLibArgs)(ftpClient_UploadProgressChanged)
ftpClient.UploadFileCompleted += New EventHandler(Of UploadFileCompletedEventLibArgs)(ftpClient_UploadFileCompleted)
事实证明,这是一个可能值得投票的已知错误!