Если у вас есть такой код:
using (var zip = ZipFile.Read("whatever.zip"))
{
zip.ExtractProgress += MyExtractProgress;
numEntries = zip.Entries.Count;
foreach (var e in zip)
{
e.Extract();
}
}
... вы получите извлеченные события прогресса.Класс ExtractProgressEventArgs документирован здесь .В классе args события есть поле EventType, которое описывает, какое событие вы получили.Эти типы описаны здесь .
Существуют типы событий для до начала извлечения для записи, после завершения извлечения (для записи).Существует также тип события, который запускается для каждого фрагмента данных, которые распаковываются, если вы хотите отслеживать до этого уровня.Благодаря этому Вы можете получить тысячи событий для конкретного извлечения.Если вы отслеживаете количество записей, то вы знаете, сколько «после» событий ожидать, и вы можете объявить извлечение завершенным, когда вы получили соответствующее число после событий.
Библиотека не может выдать событие «извлечение завершено», если вы извлекаете каждую запись в цикле, как я показал выше.Это потому, что он не знает, продолжите ли вы цикл до конца или, возможно, остановитесь посередине.Это не может знать.
Если вы вызываете zip.ExtractAll (), например:
using (var zip = ZipFile.Read("whatever.zip"))
{
zip.ExtractProgress += MyExtractProgress;
zip.ExtractAll(extractDirectory);
}
..., тогда DotNetZip выдаст тип события «все записи были извлечены».Это также описано в ссылках документации, которые я предоставил выше.
Итак, у вас есть несколько вариантов.