我有一个winform应用程序使用sevenzip.dll并实现它的能力,以压缩提取文件和目录。 我的问题是我想使用sevenzip.compressor类的压缩事件来跟踪压缩进度并使用progressBar显示它。 问题是,事件永远不会触发(在调试模式下检查),而所有其他事件都在工作,例如CompressionFinished事件。 我发现其他开发人员遇到了同样的问题,但没有人提供答案。 注意:dll的提取器类也按预期工作,所有事件都在触发,包括extractor.extracting事件。 任何有关如何克服这个问题的帮助都会受到关注。 以下是我正在使用的一些代码:
SevenZipCompressor compressor = new SevenZipCompressor();
// NOT FIRING
compressor.Compressing += new EventHandler<ProgressEventArgs>(compressor_Compressing);
// Firing as expected
compressor.CompressionFinished += new EventHandler<EventArgs>(compressor_CompressionFinished);
compressor.ArchiveFormat = OutArchiveFormat.Zip;
// if this value is true - then no events are fired
compressor.FastCompression = false;
compressor.CompressionMethod = CompressionMethod.Default;
compressor.TempFolderPath = System.IO.Path.GetTempPath();
compressor.EventSynchronization = EventSynchronizationStrategy.AlwaysAsynchronous;
compressor.CompressDirectory(source, output, GeneratePassword(backupID, customerID));
答案 0 :(得分:2)
找到遇到同样问题的所有人的答案。
仅当压缩方法为lzma时,才会触发事件触发。
只需将一行更改为:
compressor.CompressionMethod = CompressionMethod.Lzma;