2013-07-07 18 views
6

VB.NET'e dönüştürmem gereken aşağıdaki kodlarım var. Sorun, bulduğum her çeviri aracı ekleme işleyicisi parçasını yanlış dönüştürmektir. Bunu kendi başıma halledemiyorum.VB.NET'te bir olay işleyicisi ekleme sözdizimi

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

cevap

10

VB.NET'te olay işleyici yöntemlerini bir olayla ilişkilendirmenin iki farklı yolu vardır.

Birincisi, olay işleyicisi yönteminin tanımının sonuna eklediğiniz Handles anahtar sözcüğünü kullanmayı içerir. Örneğin:

Zaten ayrı zaten olay işleyicisi yöntemlerini tarif var ettiyseniz
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 

İlk yöntem çok daha basit (yani, bir lambda sözdizimi kullanmıyorsanız). Mümkün olduğunda bunu tavsiye ederim.

İkincisi, C# += ifadesinin AddHandler ifadesinin açık kullanımını içerir. Olay işleyicileri dinamik olarak, örneğin, ilişkilendirmek istediğinizde kullanmanız gereken budur. onları çalışma zamanında değiştirmeniz gerekiyorsa. Yani kod, dönüştürülen anlamıyla bu şekilde görünecektir:

Dim ftpClient As New FtpClient() 
AddHandler ftpClient.UploadProgressChanged, AddressOf ftpClient_UploadProgressChanged 
AddHandler ftpClient.UploadFileCompleted, AddressOf ftpClient_UploadFileCompleted 

Dediğin gibi, ben Developer Fusion's converter aracılığıyla kod çalıştıran çalıştı ve onlar geçersiz VB.NET kodunu döndürerek olduğunu görünce şaşırdı:

' WRONG CODE! 
Dim ftpClient As New FtpClient() 
ftpClient.UploadProgressChanged += New EventHandler(Of UploadProgressChangedLibArgs)(ftpClient_UploadProgressChanged) 
ftpClient.UploadFileCompleted += New EventHandler(Of UploadFileCompletedEventLibArgs)(ftpClient_UploadFileCompleted) 

Oy vermek için oy verebilecek olan a known bug budur!

+0

Çok teşekkürler! kapsamlı cevap ve çok açık! :) – sharkyenergy

+0

Şimdi bu hatayı alıyorum, bu ne anlama geliyor? teşekkürler 'Hata Tutamak, içerme türünde veya taban türlerinden birinde tanımlanan bir WithEvents değişkeni gerektirir. ' – sharkyenergy

+1

@Justme Nesne değişkeni tarafından yükseltilen olayları işlemesine neden olmak için yordam bildiriminin sonunda Tutamaçlar anahtar sözcüğünü kullanın. ** WithEvents ** anahtar sözcüğünü kullanarak bildirildi. http://msdn.microsoft.com/library/vstudio/6k46st1y – Chris

İlgili konular