Прогресс бар для разархивирования файлов, использую Ionic.zip (C# .Net)

Как сделать прогресс бар для распаковки архива? Использую Ionic.dll. Вот пример кода распаковки:

            using (ZipFile zip = new ZipFile(_filename))
            {
                zip.ExtractAll(_extractpath, ExtractExistingFileAction.OverwriteSilently);
                zip.Dispose();
            }

Ответы (1 шт):

Автор решения: aepot

Используйте ZipFile.ExtractProgress.

private async void button1_click(object sender, EventArgs e)
{
    IProgress<int> progress = new Progress<int>(p => progressBar1.Value = p);
    try
    {
        await Task.Run(() =>
        {
            int oldProgress = -1;
            using (ZipFile zip = new ZipFile(_filename))
            {
                int currentEntry = -1;
                int totalEntries = zip.Entries.Count;
                zip.ExtractProgress += (s, e) =>
                {
                    if (e.EventType == ZipProgressEventType.Extracting_BeforeExtractEntry)
                        currentEntry++;
                    else if (e.TotalBytesToTransfer > 0)
                    {
                        int newProgress = currentEntry * 100 / totalEntries + (int)(e.BytesTransferred * 100 / e.TotalBytesToTransfer / totalEntries);
                        if (newProgress != oldProgress)
                        {
                            progress.Report(newProgress);
                            oldProgress = newProgress;
                        }
                    }
                }

                zip.ExtractAll(_extractpath, ExtractExistingFileAction.OverwriteSilently);
            }
        });
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

Вызывать Dispose() не нужно, using вызовет его сам там, где закрывающая фигурная скобка.

→ Ссылка