15

我有以下代码需要转换为 VB.NET。问题是我发现的每个翻译工具都将添加处理程序部分转换错了。我自己好像做不到。

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

1 回答 1

27

在 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)

事实证明,这是一个可能值得投票的已知错误!

于 2013-07-07T10:13:14.757 回答