2013-07-07 3 views
6

VB.NET으로 변환해야하는 다음 코드가 있습니다. 문제는 추가 처리기 부분을 잘못 변환 한 것으로 보이는 모든 변환 도구입니다. 나는 혼자서 할 수있는 것 같지 않습니다.VB.NET에서 이벤트 처리기를 추가하는 구문

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

답변

10

이벤트 처리기 메서드를 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 

첫 번째 방법은 훨씬 간단합니다 (즉, 당신이 람다 구문을 사용하지 않는 경우). 가능할 때마다 추천 할 것입니다.

두 번째는 C#의 +=처럼 AddHandler 문을 명시 적으로 사용합니다. 이벤트 핸들러를 과 동적으로 연결하려는 경우 사용하는 데 필요합니다.. 런타임에 변경해야하는 경우 그래서 코드가 변환 문자 그대로 같을 것이다 :

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입니다.

+0

대단히 감사합니다! 철저한 대답과 매우 명확! :) – sharkyenergy

+0

지금이 오류가 발생합니다.이게 무슨 뜻입니까? thanks 'Error Handles 절에는 WithEvents 변수가 포함 된 유형 또는 기본 유형 중 하나에 정의되어 있어야합니다.' – sharkyenergy

+1

@Justme 프로 시저 선언 끝에 Handles 키워드를 사용하여 객체 변수가 발생시킨 이벤트를 처리하게합니다 ** WithEvents ** 키워드를 사용하여 선언되었습니다. http://msdn.microsoft.com/library/vstudio/6k46st1y – Chris

관련 문제