Dot-Net

在 VB.NET 中添加事件處理程序的語法

  • July 7, 2013

我有以下程式碼需要轉換為 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

正如您所說,我嘗試通過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)

事實證明,這是一個可能值得投票的已知錯誤!

引用自:https://stackoverflow.com/questions/17511140