我正在使用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 谢谢!
发布于 2015-08-14 15:54:45
我知道这个问题已经4岁了,但我也面临着同样的问题,所以我想和大家分享这个问题的解决方案。
根据微软在MSDN页面上的答案:
必须将ByRef参数分配给局部变量,并在lambda表达式中使用局部变量。
希望这个答案对任何人都有帮助。
发布于 2011-04-25 14:36:35
无论是否使用匿名函数,都不能使用ByRef参数(C#中的ref或out )来声明Sub委托。
但是您可以声明您的委托类型,然后使用它,甚至可以使用您的匿名函数。
在MSDN上,它提到了适用于lambda表达式中变量范围的以下规则:
https://stackoverflow.com/questions/4979208
复制相似问题