我正在使用SharpZipLib来压缩文件。该库包含在一个插件接口中,位于一个单独的DLL中。我将插件dll传递给ByRef
参数以跟踪压缩进度。
SharpZipLib在压缩时会定期调用启动压缩时传递的委托子。在调用委托时,我无法弄清楚如何更新ByRef
参数。如果我尝试在lamba表达式的主体中分配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 :(得分:0)
无论您是否使用匿名,都无法使用ByRef参数( ref 或 out 在C#中)声明 Sub 委托功能与否。
但是你可以声明你的委托类型,然后使用你的匿名函数
在MSDN上,它提到以下规则适用于lambda表达式中的变量范围: