2011-02-12 3 views
0

SharpZipLib을 사용하여 파일을 압축하고 있습니다. 라이브러리는 별도의 DLL에서 플러그인 인터페이스로 래핑됩니다. 나는 플러그인 dll ByRef 매개 변수를 전달하여 압축 진행 상황을 추적합니다.'ByRef'매개 변수 '<parametername>'을 람다 식에서 사용할 수 없습니다.

SharpZipLib은 압축하는 동안 압축을 시작할 때 전달 된 대리자 sub를 주기적으로 호출합니다. 대리자가 호출 될 때 ByRef 매개 변수를 업데이트하는 방법을 알 수 없습니다. 람 바 표현식의 본문에 ByRef 변수를 할당하려고 시도하면 'ByRef' parameter '<parametername>' cannot be used in a lambda expression 오류가 발생합니다.

Using InputFile As New IO.FileStream(SourceFile, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read) 
    Using OutputFile As New IO.FileStream(DestFile, IO.FileMode.Create) 
     Using GZipStream As New GZipOutputStream(OutputFile) 
      Dim Buffer(524228) As Byte 
      Dim Handler As New ProgressHandler(Sub(Sender As Object, EventArgs As ProgressEventArgs) Progress += EventArgs.Processed) 
      StreamUtils.Copy(InputFile, GZipStream, Buffer, Handler, New TimeSpan(10000000), Nothing, "") 
     End Using 
    End Using 
End Using 

감사 :

여기 내 코드입니다! 당신은 익명 함수를 사용하거나하지 않을 경우

답변

0

당신이하는 ByRef 매개 변수를 사용하여 하위 대표 (C#에서 밖으로 심판 또는 )에 상관없이 선언 할 수 없습니다.

그러나 당신은 당신의 대리자 형식을 선언 한 후 다음과 같은 규칙이 람다 표현식에서 변수 범위에 적용 언급 MSDN

심지어 익명의 기능을 사용할 수 있습니다 : 캡처

  • 변수를 그것을 참조하는 대리인이 범위를 벗어날 때까지 가비지 수집되지 않습니다.
  • 람다 식에 도입 된 변수는 외부 메서드에서 볼 수 없습니다.
  • 람다 식은 VB에서 ref [ByRef를 VB] 또는 둘러싼 메서드에서 out 매개 변수를 직접 캡처 할 수 없습니다.
  • 람다 식의 return 문은 둘러싼 메서드를 반환하지 않습니다.
  • 람다 식은 goto 문, break 문 또는 continue 문을 포함 할 수 없습니다. 대상이 본문 외부 또는 포함 된 익명 함수의 본문에있는 경우.
3

나는 4 세이지만, 나는 똑같은 문제에 직면하고있다. 나는 그것을 알아 냈으므로 당신과 해결책을 나누고 싶다. MSDN 페이지에서 Microsoft 답변에 따르면

:

당신은 로컬 변수에 하는 ByRef 매개 변수를 할당하고, 는 람다 식의 지역 변수를 사용해야합니다.

희망 답변자.

+0

조금 어리석은 간단한 해결책 :-). 엄지 척! –

관련 문제