如何锁流?我有2个帖子:线程1正在写入流。线程2正在从该流中读取。如何锁定线程1,使其无法写入线程2?所以我可以从流中读取?MemoryStreamoutputStream=newMemoryStream();线程1:stream=System.IO.File.OpenRead(fileToSend);compressor.CompressionMethod=SevenZip.CompressionMethod.Lzma2;compressor.CompressionLevel=SevenZip.CompressionLevel.Fast;compressor.CompressStream(stream,outputStream);我想从线程2中的输出流中读取。我尝试使用lock(outputStream)和outputStream.Lock(0,outputStream.Lengh)并且都不会阻止线程1写入它。我正在使用sevenZipSharp我建议您将压缩流直接写入网络,而不是同时进行读取和写入。不幸的是,我认为sevenZipSharp库不能直接写入NetworkStream。或者,您可以使用DeflateStream。它可以直接写入NetworkStream。它已经包含在.NETFramework(System.dll)中,开箱即用。客户端连接(targetHost,端口);varnetworkStreamRaw=client.GetStream();varnetworkStreamCompressed=newDeflateStream(networkStreamRaw,CompressionMode.Compress);{networkStreamCompressed.Write(rawData,0,rawData.Length);我用1MB的数据测试了上面的代码,并成功地从接收器中减小(压缩)了大小。发送了1048576字节的原始数据。收到1033字节的压缩数据。我的测试代码可以在这里找到http://pastebin.com/X0SYjYD7编辑:至于解压,你可以newDeflateStream(streamReadingCompressedData,CompressionMode.Decompress)得到它。以上就是C#学习教程:如何锁流?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
