我有以下代码需要转换到VB.NET。问题是我找到的每个翻译工具都错误地转换了添加处理程序部分。我一个人似乎做不到。
FtpClient ftpClient = new FtpClient();
ftpClient.UploadProgressChanged += new EventHandler<UploadProgressChangedLibArgs>(ftpClient_UploadProgressChanged);
ftpClient.UploadFileCompleted += new EventHandler<UploadFileCompletedEventLibArgs>(ftpClient_UploadFileCompleted);
在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
正如你所说,我尝试通过DeveloperFusion的转换器运行你的代码,并惊讶地发现他们返回了无效的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)
事实证明,这是一个已知的错误,可能值得投票支持!