有兩種不同的方法將事件處理程序方法與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's converter運行代碼,驚訝地看到,他們正在返回無效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)
原來,這可能是值得投票的a known bug!
非常感謝你!詳盡的答案和非常明確! :) – sharkyenergy
我現在得到這個錯誤,這是什麼意思?謝謝'錯誤句柄子句要求在包含類型或其基類型中定義一個WithEvents變量。' – sharkyenergy
@Justme在過程聲明的末尾使用Handles關鍵字來使它處理由對象變量引發的事件使用** WithEvents **關鍵字聲明。 http://msdn.microsoft.com/library/vstudio/6k46st1y – Chris