2013-07-07 38 views
6

Tôi có mã sau cần chuyển đổi sang VB.NET. Vấn đề là mọi công cụ dịch thuật tôi tìm thấy đang chuyển đổi phần xử lý thêm sai. Tôi dường như không thể làm điều đó một mình.Cú pháp để thêm trình xử lý sự kiện trong VB.NET

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

Trả lời

10

Có hai cách khác nhau để kết hợp các phương thức xử lý sự kiện với sự kiện trong VB.NET.

Việc đầu tiên liên quan đến việc sử dụng từ khóa Handles, mà bạn thêm vào cuối định nghĩa của phương thức xử lý sự kiện. Ví dụ:

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 

Phương pháp đầu tiên đơn giản hơn nhiều nếu bạn đã có phương thức xử lý sự kiện được xác định riêng biệt (tức là nếu bạn không sử dụng cú pháp lambda). Tôi sẽ giới thiệu nó bất cứ khi nào có thể.

Điều thứ hai liên quan đến việc sử dụng rõ ràng câu lệnh AddHandler, giống như += trong C#. Đây là tài khoản bạn cần sử dụng nếu bạn muốn kết hợp trình xử lý sự kiện động, ví dụ: nếu bạn cần thay đổi chúng trong thời gian chạy. Vì vậy, mã của bạn, nghĩa là chuyển đổi, sẽ trông như thế này:

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

Giống như bạn nói, tôi đã cố gắng chạy mã của bạn thông qua Developer Fusion's converter và rất ngạc nhiên khi thấy rằng họ đã trở về mã VB.NET không hợp lệ:

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

Hóa ra, đó là a known bug có thể đáng để bỏ phiếu!

+0

cảm ơn bạn rất nhiều! câu trả lời đầy đủ và rất rõ ràng! :) – sharkyenergy

+0

Tôi đang gặp lỗi này ngay bây giờ, điều này có nghĩa là gì? nhờ mệnh đề 'Error Xử lý yêu cầu biến WithEvents được định nghĩa trong loại chứa hoặc một trong các loại cơ sở của nó.' – sharkyenergy

+1

@Justme Sử dụng từ khóa Handles ở cuối khai báo thủ tục để xử lý sự kiện được tạo bởi biến đối tượng được khai báo bằng cách sử dụng từ khóa ** WithEvents **. http://msdn.microsoft.com/library/vstudio/6k46st1y – Chris

Các vấn đề liên quan