[
  {
    "Id": "455854",
    "ThreadId": "216137",
    "Html": "<p>Hi,</p>\r\n<p>I'm trying to extract a zip with a single progress bar that displays the overall process (Rather than individual files - my zips contain a single large file)<br>I've looked through the examples and documentation but cannot find a working example. The Winforms example doesn't seem to work.</p>\r\n<p>I'm just trying to display a single progress bar with the overall extraction progress. (With a label displaying percentage)</p>\r\n<p>Thanks.</p>\r\n<p>&nbsp;</p>\r\n<p>&nbsp;</p>",
    "PostedDate": "2010-06-15T15:26:43.22-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "455856",
    "ThreadId": "216137",
    "Html": "<p>Here's the example I'm working with, the progress bar does not work:</p>\r\n<p>\r\n<div style=\"color:black;background-color:white\">\r\n<pre><span style=\"color:blue\">Imports</span> System\r\n<span style=\"color:blue\">Imports</span> System.IO\r\n<span style=\"color:blue\">Imports</span> Ionic.Zip\r\n\r\n<span style=\"color:blue\">Public</span> <span style=\"color:blue\">Class</span> Form1\r\n\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Delegate</span> <span style=\"color:blue\">Sub</span> ZipProgress(<span style=\"color:blue\">ByVal</span> e <span style=\"color:blue\">As</span> ZipProgressEventArgs)\r\n    <span style=\"color:blue\">Dim</span> _operationCanceled <span style=\"color:blue\">As</span> <span style=\"color:blue\">Boolean</span>\r\n    <span style=\"color:blue\">Dim</span> nFilesCompleted <span style=\"color:blue\">As</span> <span style=\"color:blue\">Integer</span>\r\n    <span style=\"color:blue\">Dim</span> totalEntriesToProcess <span style=\"color:blue\">As</span> <span style=\"color:blue\">Integer</span>\r\n    <span style=\"color:blue\">Dim</span> _appCuKey <span style=\"color:blue\">As</span> Microsoft.Win32.RegistryKey\r\n    <span style=\"color:blue\">Dim</span> _extractThread <span style=\"color:blue\">As</span> System.Threading.Thread\r\n    <span style=\"color:blue\">Dim</span> AppRegyPath <span style=\"color:blue\">As</span> <span style=\"color:blue\">String</span> = <span style=\"color:#a31515\">&quot;Software\\Ionic\\VBunZip&quot;</span>\r\n    <span style=\"color:blue\">Dim</span> rvn_ZipFile <span style=\"color:blue\">As</span> <span style=\"color:blue\">String</span> = <span style=\"color:#a31515\">&quot;zipfile&quot;</span>\r\n    <span style=\"color:blue\">Dim</span> rvn_ExtractDir <span style=\"color:blue\">As</span> <span style=\"color:blue\">String</span> = <span style=\"color:#a31515\">&quot;extractdir&quot;</span>\r\n\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> btnZipBrowse_Click(<span style=\"color:blue\">ByVal</span> sender <span style=\"color:blue\">As</span> <span style=\"color:blue\">Object</span>, <span style=\"color:blue\">ByVal</span> e <span style=\"color:blue\">As</span> EventArgs) <span style=\"color:blue\">Handles</span> btnZipBrowse.Click\r\n        <span style=\"color:blue\">Dim</span> openFileDialog1 <span style=\"color:blue\">As</span> <span style=\"color:blue\">New</span> OpenFileDialog\r\n        <span style=\"color:blue\">If</span> (<span style=\"color:blue\">String</span>.IsNullOrEmpty(tbZipToOpen.Text)) <span style=\"color:blue\">Then</span>\r\n            openFileDialog1.InitialDirectory = <span style=\"color:#a31515\">&quot;c:\\&quot;</span>\r\n        <span style=\"color:blue\">Else</span>\r\n            openFileDialog1.InitialDirectory = IIf(File.Exists(<span style=\"color:blue\">Me</span>.tbZipToOpen.Text), Path.GetDirectoryName(<span style=\"color:blue\">Me</span>.tbZipToOpen.Text), <span style=\"color:blue\">Me</span>.tbZipToOpen.Text)\r\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">If</span>\r\n        openFileDialog1.Filter = <span style=\"color:#a31515\">&quot;zip files|*.zip|EXE files|*.exe|All Files|*.*&quot;</span>\r\n        openFileDialog1.FilterIndex = 1\r\n        openFileDialog1.RestoreDirectory = <span style=\"color:blue\">True</span>\r\n        <span style=\"color:blue\">If</span> (openFileDialog1.ShowDialog = DialogResult.OK) <span style=\"color:blue\">Then</span>\r\n            <span style=\"color:blue\">Me</span>.tbZipToOpen.Text = openFileDialog1.FileName\r\n            <span style=\"color:blue\">If</span> File.Exists(<span style=\"color:blue\">Me</span>.tbZipToOpen.Text) <span style=\"color:blue\">Then</span>\r\n                <span style=\"color:blue\">Me</span>.btnUnzip_Click(sender, e)\r\n            <span style=\"color:blue\">End</span> <span style=\"color:blue\">If</span>\r\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">If</span>\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\r\n\r\n\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> btnUnzip_Click(<span style=\"color:blue\">ByVal</span> sender <span style=\"color:blue\">As</span> <span style=\"color:blue\">Object</span>, <span style=\"color:blue\">ByVal</span> e <span style=\"color:blue\">As</span> EventArgs) <span style=\"color:blue\">Handles</span> btnUnzip.Click\r\n        <span style=\"color:blue\">If</span> <span style=\"color:blue\">Not</span> <span style=\"color:blue\">String</span>.IsNullOrEmpty(tbZipToOpen.Text) <span style=\"color:blue\">And</span> _\r\n        File.Exists(<span style=\"color:blue\">Me</span>.tbZipToOpen.Text) <span style=\"color:blue\">And</span> _\r\n        <span style=\"color:blue\">Not</span> <span style=\"color:blue\">String</span>.IsNullOrEmpty(tbExtractDir.Text) <span style=\"color:blue\">And</span> _\r\n        Directory.Exists(tbExtractDir.Text) <span style=\"color:blue\">Then</span>\r\n            btnCancel.Enabled = <span style=\"color:blue\">True</span>\r\n            btnUnzip.Enabled = <span style=\"color:blue\">False</span>\r\n            KickoffExtract()\r\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">If</span>\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\r\n\r\n\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> KickoffExtract()\r\n        <span style=\"color:blue\">If</span> <span style=\"color:blue\">Not</span> <span style=\"color:blue\">String</span>.IsNullOrEmpty(tbExtractDir.Text) <span style=\"color:blue\">Then</span>\r\n            lblStatus.Text = <span style=\"color:#a31515\">&quot;Extracting...&quot;</span>\r\n            <span style=\"color:blue\">Dim</span> args(2) <span style=\"color:blue\">As</span> <span style=\"color:blue\">Object</span>\r\n            args(0) = tbZipToOpen.Text\r\n            args(1) = tbExtractDir.Text\r\n            _extractThread = <span style=\"color:blue\">New</span> System.Threading.Thread(<span style=\"color:blue\">New</span> System.Threading.ParameterizedThreadStart(<span style=\"color:blue\">AddressOf</span> UnzipFile))\r\n            _extractThread.Start(args)\r\n            <span style=\"color:blue\">Me</span>.Cursor = Cursors.WaitCursor\r\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">If</span>\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\r\n\r\n\r\n\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> btnExtractDirBrowse_Click(<span style=\"color:blue\">ByVal</span> sender <span style=\"color:blue\">As</span> <span style=\"color:blue\">Object</span>, <span style=\"color:blue\">ByVal</span> e <span style=\"color:blue\">As</span> EventArgs) <span style=\"color:blue\">Handles</span> btnExtractDirBrowse.Click\r\n        <span style=\"color:blue\">Dim</span> dlg <span style=\"color:blue\">As</span> <span style=\"color:blue\">New</span> FolderBrowserDialog\r\n        dlg.Description = <span style=\"color:#a31515\">&quot;Select a folder to zip up:&quot;</span>\r\n        dlg.ShowNewFolderButton = <span style=\"color:blue\">False</span>\r\n        <span style=\"color:green\">'dlg.ShowEditBox = True</span>\r\n        dlg.SelectedPath = <span style=\"color:blue\">Me</span>.tbExtractDir.Text\r\n        <span style=\"color:green\">'dlg.ShowFullPathInEditBox = True</span>\r\n        <span style=\"color:blue\">If</span> (dlg.ShowDialog = DialogResult.OK) <span style=\"color:blue\">Then</span>\r\n            tbExtractDir.Text = dlg.SelectedPath\r\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">If</span>\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\r\n\r\n\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> UnzipFile(<span style=\"color:blue\">ByVal</span> args <span style=\"color:blue\">As</span> <span style=\"color:blue\">Object</span>())\r\n        <span style=\"color:blue\">Dim</span> extractCancelled <span style=\"color:blue\">As</span> <span style=\"color:blue\">Boolean</span> = <span style=\"color:blue\">False</span>\r\n        <span style=\"color:blue\">Dim</span> zipToRead <span style=\"color:blue\">As</span> <span style=\"color:blue\">String</span> = args(0)\r\n        <span style=\"color:blue\">Dim</span> extractDir <span style=\"color:blue\">As</span> <span style=\"color:blue\">String</span> = args(1)\r\n        <span style=\"color:blue\">Try</span>\r\n            <span style=\"color:blue\">Using</span> zip <span style=\"color:blue\">As</span> ZipFile = ZipFile.Read(zipToRead)\r\n                totalEntriesToProcess = zip.Entries.<span style=\"color:blue\">Count</span>\r\n                SetProgressBarMax(zip.Entries.<span style=\"color:blue\">Count</span>)\r\n                <span style=\"color:blue\">AddHandler</span> zip.ExtractProgress, <span style=\"color:blue\">New</span> EventHandler(Of ExtractProgressEventArgs)(<span style=\"color:blue\">AddressOf</span> <span style=\"color:blue\">Me</span>.zip_ExtractProgress)\r\n                zip.ExtractAll(extractDir, Ionic.Zip.ExtractExistingFileAction.OverwriteSilently)\r\n            <span style=\"color:blue\">End</span> <span style=\"color:blue\">Using</span>\r\n        <span style=\"color:blue\">Catch</span> ex1 <span style=\"color:blue\">As</span> Exception\r\n            MessageBox.Show(<span style=\"color:blue\">String</span>.Format(<span style=\"color:#a31515\">&quot;There's been a problem extracting that zip file.  {0}&quot;</span>, ex1.Message), <span style=\"color:#a31515\">&quot;Error Extracting&quot;</span>, MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1)\r\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">Try</span>\r\n        ResetUI()\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\r\n\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> ResetUI()\r\n        <span style=\"color:blue\">If</span> btnCancel.InvokeRequired <span style=\"color:blue\">Then</span>\r\n            btnCancel.Invoke(<span style=\"color:blue\">New</span> Action(<span style=\"color:blue\">AddressOf</span> ResetUI), <span style=\"color:blue\">New</span> <span style=\"color:blue\">Object</span>() {})\r\n        <span style=\"color:blue\">Else</span>\r\n            btnUnzip.Enabled = <span style=\"color:blue\">True</span>\r\n            btnCancel.Enabled = <span style=\"color:blue\">False</span>\r\n            ProgressBar1.Maximum = 1\r\n            ProgressBar1.Value = 0\r\n            <span style=\"color:blue\">Me</span>.Cursor = Cursors.Arrow\r\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">If</span>\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\r\n\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> SetProgressBarMax(<span style=\"color:blue\">ByVal</span> n <span style=\"color:blue\">As</span> <span style=\"color:blue\">Integer</span>)\r\n        <span style=\"color:blue\">If</span> ProgressBar1.InvokeRequired <span style=\"color:blue\">Then</span>\r\n            ProgressBar1.Invoke(<span style=\"color:blue\">New</span> Action(Of <span style=\"color:blue\">Integer</span>)(<span style=\"color:blue\">AddressOf</span> SetProgressBarMax), <span style=\"color:blue\">New</span> <span style=\"color:blue\">Object</span>() {n})\r\n        <span style=\"color:blue\">Else</span>\r\n            ProgressBar1.Maximum = n\r\n            ProgressBar1.<span style=\"color:blue\">Step</span> = 1\r\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">If</span>\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\r\n\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> zip_ExtractProgress(<span style=\"color:blue\">ByVal</span> sender <span style=\"color:blue\">As</span> <span style=\"color:blue\">Object</span>, <span style=\"color:blue\">ByVal</span> e <span style=\"color:blue\">As</span> ExtractProgressEventArgs)\r\n        <span style=\"color:blue\">If</span> (e.EventType = Ionic.Zip.ZipProgressEventType.Extracting_AfterExtractEntry) <span style=\"color:blue\">Then</span>\r\n            StepEntryProgress(e)\r\n        <span style=\"color:blue\">ElseIf</span> (e.EventType = ZipProgressEventType.Extracting_BeforeExtractAll) <span style=\"color:blue\">Then</span>\r\n            <span style=\"color:green\">'StepArchiveProgress(e)</span>\r\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">If</span>\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\r\n\r\n\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> StepEntryProgress(<span style=\"color:blue\">ByVal</span> e <span style=\"color:blue\">As</span> ZipProgressEventArgs)\r\n        <span style=\"color:blue\">If</span> ProgressBar1.InvokeRequired <span style=\"color:blue\">Then</span>\r\n            ProgressBar1.Invoke(<span style=\"color:blue\">New</span> ZipProgress(<span style=\"color:blue\">AddressOf</span> StepEntryProgress), <span style=\"color:blue\">New</span> <span style=\"color:blue\">Object</span>() {e})\r\n        <span style=\"color:blue\">ElseIf</span> <span style=\"color:blue\">Not</span> _operationCanceled <span style=\"color:blue\">Then</span>\r\n            ProgressBar1.PerformStep()\r\n            System.Threading.Thread.Sleep(100)\r\n            <span style=\"color:green\">'set a label with status information</span>\r\n            nFilesCompleted = nFilesCompleted + 1\r\n            lblStatus.Text = <span style=\"color:blue\">String</span>.Format(<span style=\"color:#a31515\">&quot;{0} of {1} files...({2})&quot;</span>, nFilesCompleted, totalEntriesToProcess, e.CurrentEntry.FileName)\r\n            <span style=\"color:blue\">Me</span>.Update()\r\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">If</span>\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\r\n\r\n\r\n\r\n    <span style=\"color:green\">'Private Sub StepArchiveProgress(ByVal e As ZipProgressEventArgs)</span>\r\n    <span style=\"color:green\">'    If ProgressBar1.InvokeRequired Then</span>\r\n    <span style=\"color:green\">'        ProgressBar1.Invoke(New ZipProgress(AddressOf StepArchiveProgress), New Object() {e})</span>\r\n    <span style=\"color:green\">'    ElseIf Not _operationCanceled Then</span>\r\n    <span style=\"color:green\">'        _nFilesCompleted = _nFilesCompleted + 1</span>\r\n    <span style=\"color:green\">'        ProgressBar1.PerformStep()</span>\r\n    <span style=\"color:green\">'        progressBar2.Value = progressBar2.Maximum = 1</span>\r\n    <span style=\"color:green\">'        MyBase.Update()</span>\r\n    <span style=\"color:green\">'    End If</span>\r\n    <span style=\"color:green\">'End Sub</span>\r\n\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> btnCancel_Click(<span style=\"color:blue\">ByVal</span> sender <span style=\"color:blue\">As</span> System.Object, <span style=\"color:blue\">ByVal</span> e <span style=\"color:blue\">As</span> System.EventArgs) <span style=\"color:blue\">Handles</span> btnCancel.Click\r\n        _operationCanceled = <span style=\"color:blue\">True</span>\r\n        ProgressBar1.Maximum = 1\r\n        ProgressBar1.Value = 0\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\r\n\r\n\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> SaveFormToRegistry()\r\n        <span style=\"color:blue\">If</span> AppCuKey <span style=\"color:blue\">IsNot</span> <span style=\"color:blue\">Nothing</span> <span style=\"color:blue\">Then</span>\r\n            <span style=\"color:blue\">If</span> <span style=\"color:blue\">Not</span> <span style=\"color:blue\">String</span>.IsNullOrEmpty(tbZipToOpen.Text) <span style=\"color:blue\">Then</span>\r\n                AppCuKey.SetValue(rvn_ZipFile, <span style=\"color:blue\">Me</span>.tbZipToOpen.Text)\r\n            <span style=\"color:blue\">End</span> <span style=\"color:blue\">If</span>\r\n            <span style=\"color:blue\">If</span> <span style=\"color:blue\">Not</span> <span style=\"color:blue\">String</span>.IsNullOrEmpty(tbExtractDir.Text) <span style=\"color:blue\">Then</span>\r\n                AppCuKey.SetValue(rvn_ExtractDir, tbExtractDir.Text)\r\n            <span style=\"color:blue\">End</span> <span style=\"color:blue\">If</span>\r\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">If</span>\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\r\n\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> LoadFormFromRegistry()\r\n        <span style=\"color:blue\">If</span> AppCuKey <span style=\"color:blue\">IsNot</span> <span style=\"color:blue\">Nothing</span> <span style=\"color:blue\">Then</span>\r\n            <span style=\"color:blue\">Dim</span> s <span style=\"color:blue\">As</span> <span style=\"color:blue\">String</span>\r\n            s = AppCuKey.GetValue(rvn_ZipFile)\r\n            <span style=\"color:blue\">If</span> <span style=\"color:blue\">Not</span> <span style=\"color:blue\">String</span>.IsNullOrEmpty(s) <span style=\"color:blue\">Then</span>\r\n                <span style=\"color:blue\">Me</span>.tbZipToOpen.Text = s\r\n            <span style=\"color:blue\">End</span> <span style=\"color:blue\">If</span>\r\n            s = AppCuKey.GetValue(rvn_ExtractDir)\r\n            <span style=\"color:blue\">If</span> <span style=\"color:blue\">Not</span> <span style=\"color:blue\">String</span>.IsNullOrEmpty(s) <span style=\"color:blue\">Then</span>\r\n                tbExtractDir.Text = s\r\n            <span style=\"color:blue\">End</span> <span style=\"color:blue\">If</span>\r\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">If</span>\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\r\n\r\n\r\n    <span style=\"color:blue\">Public</span> <span style=\"color:blue\">ReadOnly</span> <span style=\"color:blue\">Property</span> AppCuKey() <span style=\"color:blue\">As</span> Microsoft.Win32.RegistryKey\r\n        <span style=\"color:blue\">Get</span>\r\n            <span style=\"color:blue\">If</span> (_appCuKey <span style=\"color:blue\">Is</span> <span style=\"color:blue\">Nothing</span>) <span style=\"color:blue\">Then</span>\r\n                <span style=\"color:blue\">Me</span>._appCuKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(AppRegyPath, <span style=\"color:blue\">True</span>)\r\n                <span style=\"color:blue\">If</span> (<span style=\"color:blue\">Me</span>._appCuKey <span style=\"color:blue\">Is</span> <span style=\"color:blue\">Nothing</span>) <span style=\"color:blue\">Then</span>\r\n                    <span style=\"color:blue\">Me</span>._appCuKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(AppRegyPath)\r\n                <span style=\"color:blue\">End</span> <span style=\"color:blue\">If</span>\r\n            <span style=\"color:blue\">End</span> <span style=\"color:blue\">If</span>\r\n            <span style=\"color:blue\">Return</span> _appCuKey\r\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">Get</span>\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Property</span>\r\n\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> Form1_FormClosing(<span style=\"color:blue\">ByVal</span> sender <span style=\"color:blue\">As</span> System.Object, <span style=\"color:blue\">ByVal</span> e <span style=\"color:blue\">As</span> System.Windows.Forms.FormClosingEventArgs) <span style=\"color:blue\">Handles</span> <span style=\"color:blue\">MyBase</span>.FormClosing\r\n        SaveFormToRegistry()\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\r\n\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> Form1_Load(<span style=\"color:blue\">ByVal</span> sender <span style=\"color:blue\">As</span> System.Object, <span style=\"color:blue\">ByVal</span> e <span style=\"color:blue\">As</span> System.EventArgs) <span style=\"color:blue\">Handles</span> <span style=\"color:blue\">MyBase</span>.Load\r\n        LoadFormFromRegistry()\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\r\n<span style=\"color:blue\">End</span> <span style=\"color:blue\">Class</span>\r\n\r\n\r\n</pre>\r\n</div>\r\n</p>",
    "PostedDate": "2010-06-15T15:35:07.34-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "455895",
    "ThreadId": "216137",
    "Html": "<p>I'd suggest putting a breakpoint in the ExtractProgress event, to verify that it is actually being called.</p>\r\n<p>If it IS being called, then you'll need to debug why the code is not working as you expect.</p>\r\n<p>&nbsp;</p>\r\n<p>&nbsp;</p>",
    "PostedDate": "2010-06-15T17:14:38.21-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "456098",
    "ThreadId": "216137",
    "Html": "<p>Hi Cheeso, I've simplified an example to try and get this progress working. What value should I use to set the progress bars maximum value?</p>\r\n<div style=\"color:black;background-color:white\">\r\n<pre><span style=\"color:blue\">Imports</span> Ionic.Zip\r\n\r\n<span style=\"color:blue\">Public</span> <span style=\"color:blue\">Class</span> Form1\r\n\r\n    <span style=\"color:blue\">Dim</span> zipfileName <span style=\"color:blue\">As</span> <span style=\"color:blue\">String</span> = <span style=\"color:#a31515\">&quot;C:\\Test\\test.zip&quot;</span>\r\n    <span style=\"color:blue\">Dim</span> extractDirectory <span style=\"color:blue\">As</span> <span style=\"color:blue\">String</span> = <span style=\"color:#a31515\">&quot;C:\\Test\\&quot;</span>\r\n\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> Form1_Load(<span style=\"color:blue\">ByVal</span> sender <span style=\"color:blue\">As</span> System.Object, <span style=\"color:blue\">ByVal</span> e <span style=\"color:blue\">As</span> System.EventArgs) <span style=\"color:blue\">Handles</span> <span style=\"color:blue\">MyBase</span>.Load\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\r\n\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> Unzip()\r\n        <span style=\"color:blue\">Dim</span> args(2) <span style=\"color:blue\">As</span> <span style=\"color:blue\">String</span>\r\n        args(0) = <span style=\"color:blue\">Me</span>.zipfileName\r\n        args(1) = <span style=\"color:blue\">Me</span>.extractDirectory\r\n        <span style=\"color:blue\">Dim</span> worker <span style=\"color:blue\">As</span> System.Threading.Thread\r\n        worker = <span style=\"color:blue\">New</span> System.Threading.Thread(<span style=\"color:blue\">New</span> System.Threading.ParameterizedThreadStart(<span style=\"color:blue\">AddressOf</span> UnzipFile))\r\n        worker.Start(args)\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\r\n\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> UnzipFile(<span style=\"color:blue\">ByVal</span> args <span style=\"color:blue\">As</span> <span style=\"color:blue\">String</span>())\r\n        <span style=\"color:blue\">Try</span>\r\n            <span style=\"color:blue\">Using</span> zip <span style=\"color:blue\">As</span> ZipFile = ZipFile.Read(args(0))\r\n                <span style=\"color:blue\">Me</span>.ProgressBar1.Maximum = ????\r\n                <span style=\"color:blue\">Dim</span> entry <span style=\"color:blue\">As</span> ZipEntry\r\n                <span style=\"color:blue\">For</span> <span style=\"color:blue\">Each</span> entry <span style=\"color:blue\">In</span> zip\r\n                    UpdateUi(entry.FileName)\r\n                    entry.Extract(args(1), ExtractExistingFileAction.OverwriteSilently)\r\n                    <span style=\"color:green\">'' Sleep a little because it's really fast</span>\r\n                    System.Threading.Thread.Sleep(20)\r\n                <span style=\"color:blue\">Next</span>\r\n                UpdateUi(<span style=\"color:blue\">String</span>.Format(<span style=\"color:#a31515\">&quot;Finished unzipping {0} entries&quot;</span>, zip.Entries.<span style=\"color:blue\">Count</span>))\r\n            <span style=\"color:blue\">End</span> <span style=\"color:blue\">Using</span>\r\n        <span style=\"color:blue\">Catch</span> ex1 <span style=\"color:blue\">As</span> Exception\r\n            <span style=\"color:blue\">Me</span>.label1.Text = (<span style=\"color:#a31515\">&quot;Exception: &quot;</span> &amp; ex1.ToString)\r\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">Try</span>\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\r\n\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> UpdateUi(<span style=\"color:blue\">ByVal</span> filename <span style=\"color:blue\">As</span> <span style=\"color:blue\">String</span>)\r\n        <span style=\"color:blue\">If</span> <span style=\"color:blue\">Me</span>.InvokeRequired <span style=\"color:blue\">Then</span>\r\n            <span style=\"color:green\">'' invoke on the proper thread </span>\r\n            <span style=\"color:blue\">Me</span>.Invoke(<span style=\"color:blue\">New</span> Action(Of <span style=\"color:blue\">String</span>)(<span style=\"color:blue\">AddressOf</span> UpdateUi), <span style=\"color:blue\">New</span> <span style=\"color:blue\">Object</span>() {filename})\r\n        <span style=\"color:blue\">Else</span>\r\n            <span style=\"color:blue\">Me</span>.label1.Text = filename\r\n            <span style=\"color:blue\">Me</span>.ProgressBar1.PerformStep()\r\n            <span style=\"color:blue\">MyBase</span>.Update()\r\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">If</span>\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\r\n\r\n\r\n\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> BtnUnzip_Click(<span style=\"color:blue\">ByVal</span> sender <span style=\"color:blue\">As</span> System.Object, <span style=\"color:blue\">ByVal</span> e <span style=\"color:blue\">As</span> System.EventArgs) <span style=\"color:blue\">Handles</span> BtnUnzip.Click\r\n        Unzip()\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\r\n<span style=\"color:blue\">End</span> <span style=\"color:blue\">Class</span>\r\n\r\n</pre>\r\n</div>",
    "PostedDate": "2010-06-16T03:53:05.557-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "456139",
    "ThreadId": "216137",
    "Html": "<p>It looks like the WinForms-Unzip is broken? (From the Dev kit example)<br><br>Theres one progress bar which indicates the progress through the number of files in the zip in steps.<br>Theres some commented out code that appears to be for the actual progress through each file, I've uncommented this, added a second progress bar to get an understanding of what I want.</p>\r\n<p>Do you have any examples of progress for the whole extraction event rather than stepped individual file extraction? (Similar to what the second progress bar is meant to do but for the whole extraction)</p>\r\n<p>Thanks.</p>",
    "PostedDate": "2010-06-16T05:17:41.443-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "456259",
    "ThreadId": "216137",
    "Html": "<div style=\"width:800px\">\r\n<p>&gt; It looks like the WinForms-Unzip is broken? (From the Dev kit example)<br><br>In what way is it broken?&nbsp; Does it simply not work?&nbsp; Does it not compile?&nbsp; If you provide a&nbsp;clear description I'll file a workitem, then investigate it and fix as appropriate.</p>\r\n<p>&gt;&nbsp;Do you have any examples of progress for the whole extraction event rather than stepped individual file extraction? (Similar to what the second progress bar is meant to do but for the whole extraction)</p>\r\n<p>Hmm,&nbsp; by &quot;the whole extraction event&quot;, I guess you want the progress through the aggregate size of the extracted files, is that right?&nbsp;&nbsp; Here's the thing - there's no general way for the library to know how many entries you are extracting, and therefore there's no way for the library to know the aggregate size of the intended extracted entries.&nbsp;In&nbsp;the specific case of an ExtractAll(), theoretically the&nbsp;library would be able to calculate the aggregate extracted size, before extraction occurred.&nbsp; It could then present, in&nbsp;the extraction progress event, the &quot;total size&quot; and the &quot;size extracted so far&quot;,&nbsp;via&nbsp;properties in the&nbsp;custom EventArgs.&nbsp; Theoretically the library could do this, but I don't believe it does so, today.&nbsp; I'm not able to look at the code, so I can't recall if that is true.</p>\r\n<p>In any case that would work only for the ExtractAll() case.&nbsp; If&nbsp;an application extracts anything other than &quot;every entry&quot; , then the library&nbsp;cannot know how many entries will be extracted, nor the aggregate size of those extracted entries.&nbsp;</p>\r\n<p>But, t<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>h<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>y<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>o<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>u<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>r<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span></span> application could pretty simply driv<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>e the kind of progress bar you want.&nbsp; To do it,&nbsp;compute the total expected size of the&nbsp;entries<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span> to be extracted (by summing ZipEntry.UncompressedS<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>i<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>z<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>e<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span><span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span> <span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>a<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>c<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>r<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>o<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>s<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>s<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span> <span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>a<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>l<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>l<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span> <span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>t<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>h<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>o<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>s<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>e<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span> <span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>e<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>n<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>t<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>r<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>i<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>e<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>s), before beginning the extraction. Then keep a running total of the &quot;extracted so far&quot; size within the ExtractProgress event, and update yo<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span>ur progress bar appropriately. &nbsp;&nbsp;</p>\r\n<p>&nbsp;</p>\r\n</div>",
    "PostedDate": "2010-06-16T09:37:33.797-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "456273",
    "ThreadId": "216137",
    "Html": "Hi Cheeso,\r\n\r\nThe example has a single progress bar which does nothing. The label (lblStatus) updates with the current extraction item and total ok.\r\n\r\nThanks.",
    "PostedDate": "2010-06-16T10:03:23.91-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "456288",
    "ThreadId": "216137",
    "Html": "This discussion has been copied to a work item. Click <a href=\"http://dotnetzip.codeplex.com/workitem/11078\">here</a> to go to the work item and continue the discussion.",
    "PostedDate": "2010-06-16T10:32:56.683-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "456329",
    "ThreadId": "216137",
    "Html": "<p>I see, that solution could work.<br>For me it's unlikely a zip would contain more than one file (Will contain a single zipped up sql .bak backup)</p>\r\n<p>So I could get away with just:</p>\r\n<p>Me.ProgressBar1.Value = 100 * e.BytesTransferred / e.TotalBytesToTransfer</p>\r\n<p>Although I would be interested in implementing a solution that can handle multiple files.<br>I think I've managed to get the sum of ZipEntry.UncompressedSize, how do I pass this to the event handler?:<br><br></p>\r\n<div style=\"color:black;background-color:white\">\r\n<pre>\r\n<div style=\"color:black;background-color:white\"><pre><span style=\"color:blue\">Imports</span> Ionic.Zip\r\n<span style=\"color:blue\">Imports</span> System.Threading\r\n<span style=\"color:blue\">Imports</span> System.ComponentModel\r\n\r\n<span style=\"color:blue\">Public</span> <span style=\"color:blue\">Class</span> Form1\r\n    <span style=\"color:blue\">Dim</span> TotalSize <span style=\"color:blue\">As</span> <span style=\"color:blue\">Long</span> <span style=\"color:green\">' Bits</span>\r\n    <span style=\"color:blue\">Dim</span> ZipUncompressedSize <span style=\"color:blue\">As</span> <span style=\"color:blue\">Long</span>\r\n    <span style=\"color:blue\">Dim</span> ZipUncompressedSize2 <span style=\"color:blue\">As</span> <span style=\"color:blue\">Long</span>\r\n    <span style=\"color:blue\">Private</span> _zipBGWorker <span style=\"color:blue\">As</span> System.ComponentModel.BackgroundWorker\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Delegate</span> <span style=\"color:blue\">Sub</span> ZipProgress(<span style=\"color:blue\">ByVal</span> e <span style=\"color:blue\">As</span> ExtractProgressEventArgs)\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Delegate</span> <span style=\"color:blue\">Sub</span> ExtractEntryProgress(<span style=\"color:blue\">ByVal</span> e <span style=\"color:blue\">As</span> ExtractProgressEventArgs)\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> BtnUnzip_Click(<span style=\"color:blue\">ByVal</span> sender <span style=\"color:blue\">As</span> System.Object, <span style=\"color:blue\">ByVal</span> e <span style=\"color:blue\">As</span> System.EventArgs) <span style=\"color:blue\">Handles</span> BtnUnzip.Click\r\n        MyExtract()\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\r\n\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> MyExtract()\r\n        <span style=\"color:blue\">Dim</span> args(2) <span style=\"color:blue\">As</span> <span style=\"color:blue\">String</span>\r\n        args(0) = <span style=\"color:#a31515\">&quot;C:\\Test\\Test2.zip&quot;</span>\r\n        args(1) = <span style=\"color:#a31515\">&quot;C:\\Test\\ZipTestExtract\\&quot;</span>\r\n        _zipBGWorker = <span style=\"color:blue\">New</span> System.ComponentModel.BackgroundWorker()\r\n        _zipBGWorker.WorkerSupportsCancellation = <span style=\"color:blue\">False</span>\r\n        _zipBGWorker.WorkerReportsProgress = <span style=\"color:blue\">False</span>\r\n        <span style=\"color:blue\">AddHandler</span> <span style=\"color:blue\">Me</span>._zipBGWorker.DoWork, <span style=\"color:blue\">New</span> DoWorkEventHandler(<span style=\"color:blue\">AddressOf</span> <span style=\"color:blue\">Me</span>.UnzipFile)\r\n        _zipBGWorker.RunWorkerAsync(args)\r\n\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\r\n\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> UnzipFile(<span style=\"color:blue\">ByVal</span> sender <span style=\"color:blue\">As</span> <span style=\"color:blue\">Object</span>, <span style=\"color:blue\">ByVal</span> e <span style=\"color:blue\">As</span> DoWorkEventArgs)\r\n        <span style=\"color:blue\">Dim</span> extractCancelled <span style=\"color:blue\">As</span> <span style=\"color:blue\">Boolean</span> = <span style=\"color:blue\">False</span>\r\n        <span style=\"color:blue\">Dim</span> args() <span style=\"color:blue\">As</span> <span style=\"color:blue\">String</span> = e.Argument\r\n        <span style=\"color:blue\">Dim</span> ZipToUnpack <span style=\"color:blue\">As</span> <span style=\"color:blue\">String</span> = args(0)\r\n        <span style=\"color:blue\">Dim</span> extractDir <span style=\"color:blue\">As</span> <span style=\"color:blue\">String</span> = args(1)\r\n        \r\n        <span style=\"color:blue\">Using</span> zip <span style=\"color:blue\">As</span> ZipFile = ZipFile.Read(ZipToUnpack)\r\n            <span style=\"color:blue\">AddHandler</span> zip.ExtractProgress, <span style=\"color:blue\">New</span> EventHandler(Of ExtractProgressEventArgs)(<span style=\"color:blue\">AddressOf</span> <span style=\"color:blue\">Me</span>.zip_ExtractProgress)\r\n            <span style=\"color:blue\">For</span> <span style=\"color:blue\">Each</span> backup <span style=\"color:blue\">In</span> zip\r\n                TotalSize = backup.UncompressedSize + TotalSize\r\n            <span style=\"color:blue\">Next</span>\r\n            <span style=\"color:blue\">For</span> <span style=\"color:blue\">Each</span> backup <span style=\"color:blue\">In</span> zip\r\n                backup.Extract(extractDir, Ionic.Zip.ExtractExistingFileAction.OverwriteSilently)\r\n             <span style=\"color:blue\">Next</span>\r\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">Using</span>\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\r\n\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> zip_ExtractProgress(<span style=\"color:blue\">ByVal</span> sender <span style=\"color:blue\">As</span> <span style=\"color:blue\">Object</span>, <span style=\"color:blue\">ByVal</span> e <span style=\"color:blue\">As</span> ExtractProgressEventArgs)\r\n\r\n        <span style=\"color:blue\">If</span> (e.EventType = ZipProgressEventType.Extracting_AfterExtractEntry) <span style=\"color:blue\">Then</span>\r\n            ZipUncompressedSize2 = ZipUncompressedSize + ZipUncompressedSize2\r\n        <span style=\"color:blue\">ElseIf</span> (e.EventType = ZipProgressEventType.Extracting_EntryBytesWritten) <span style=\"color:blue\">Then</span>\r\n            StepEntryProgress(e)\r\n\r\n            ZipUncompressedSize = e.BytesTransferred + ZipUncompressedSize2\r\n\r\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">If</span>\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\r\n\r\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> StepEntryProgress(<span style=\"color:blue\">ByVal</span> e <span style=\"color:blue\">As</span> ExtractProgressEventArgs)\r\n\r\n\r\n        <span style=\"color:blue\">If</span> <span style=\"color:blue\">Me</span>.ProgressBar1.InvokeRequired <span style=\"color:blue\">Then</span>\r\n            <span style=\"color:blue\">Me</span>.ProgressBar1.Invoke(<span style=\"color:blue\">New</span> ExtractEntryProgress(<span style=\"color:blue\">AddressOf</span> <span style=\"color:blue\">Me</span>.StepEntryProgress), <span style=\"color:blue\">New</span> <span style=\"color:blue\">Object</span>() {e})\r\n        <span style=\"color:blue\">Else</span>\r\n\r\n            <span style=\"color:blue\">Me</span>.ProgressBar1.Maximum = 100\r\n            <span style=\"color:blue\">Me</span>.ProgressBar1.Value = 100 * ZipUncompressedSize / TotalSize\r\n            <span style=\"color:blue\">Me</span>.LblStatus.Text = <span style=\"color:blue\">CStr</span>(100 * (ZipUncompressedSize / TotalSize).ToString(<span style=\"color:#a31515\">&quot;#,##0.00&quot;</span>)) &amp; <span style=\"color:#a31515\">&quot;% Complete&quot;</span>\r\n\r\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">If</span>\r\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\r\n\r\n\r\n  \r\n<span style=\"color:blue\">End</span> <span style=\"color:blue\">Class</span>\r\n\r\n\r\n\r\n</pre>\r\n</div>\r\n</pre>\r\n</div>\r\n<p>&nbsp;</p>\r\n<div style=\"color:black;background-color:white\">\r\n<pre>Thank you for your help.</pre>\r\n</div>",
    "PostedDate": "2010-06-16T12:21:10.78-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "456351",
    "ThreadId": "216137",
    "Html": "<p>if you are concerned about extracting a single entry, then you don't need any of what I described. the EventArgs contains a reference to the ZipEntry, from which you can get UncompressedSize.</p>\r\n<p>In the general case, the easiest way&nbsp;to &quot;pass&quot; the aggregate uncompressed size to the event handler would be to use an instance variable on your Form or Window to store that quantity.</p>\r\n<p>&nbsp;</p>",
    "PostedDate": "2010-06-16T13:47:03.267-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "456381",
    "ThreadId": "216137",
    "Html": "<p>Hi Cheeso,</p>\r\n<p>For the moment that's fine but I can see this ability being useful in the future.<br>I've noticed the total bytes from BytesTransferred is slightly wrong,</p>\r\n<p>Windows &amp; ZipEntry.UncompressedSize give 305150464 (Total of 3 files in zip)<br>BytesTransfeered gives 361510400.</p>\r\n<p>I've updated the above code with what I'm currently using to get these figures.<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span></p>\r\n<p>Thanks.<span id=\"_mce_start\" style=\"line-height:0;display:none\">﻿</span></p>\r\n<p>&nbsp;</p>\r\n<p>&nbsp;</p>\r\n<p>&nbsp;</p>",
    "PostedDate": "2010-06-16T14:39:04.78-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "456385",
    "ThreadId": "216137",
    "Html": "<p>if you have a smaller archive that exhibits the discrepancy, I'd like to have a look at it.</p>\r\n<p>&nbsp;</p>",
    "PostedDate": "2010-06-16T14:57:03.003-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "456386",
    "ThreadId": "216137",
    "Html": "Sure, I will create an example now.",
    "PostedDate": "2010-06-16T14:58:56.1-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "456411",
    "ThreadId": "216137",
    "Html": "<p>I've tried with several zips containing different file types but cannot reproduce this...</p>\r\n<p><br>I'm having problems keeping a runnig total of BytesTransferred:<br><a href=\"http://www.daniweb.com/forums/thread290601.html\">http://www.daniweb.com/forums/thread290601.html</a></p>\r\n<p>Values after extracting 3 files:<br>TotalSize = (UncompressedSize - Global) 305150464 (Which is correct for the total size of all files)<br>TransferTotal (Global Long) = 2447309139968 (I expected it to total TotalSize?)</p>\r\n<p>Values after extracting first file:<br>BytesToTransfer = 56378880 for the first file (Which is correct)<br>TransferTotal (Global) = 97109969920 in relation to the above value... Not sure how it's getting this figure... Should be the same?</p>\r\n<p><br>I have &quot;TranferTotal = e.BytesTransferred + TranferTotal&quot; on event &amp;quot;ZipProgressEventType.Extracting_EntryBytesWritten&quot;<br>To increment TransferTotal between extracted files.</p>\r\n<p>Thanks.</p>",
    "PostedDate": "2010-06-16T16:56:47.323-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "456693",
    "ThreadId": "216137",
    "Html": "<p>Right, it sounds like you're having some problems with the logic in your code.</p>\r\n<p>ExtractProgressEventArgs.BytesTransferred&nbsp; is the running total of bytes transferred for the current entry being extracted.&nbsp; Suppose you have an entry that is 10,000 bytes.&nbsp; On successive invocations of the ExtractProgress event,&nbsp;e.BytesTransferrred might progress through 1000, 2000, 3000, and so on, up to 10,0000.</p>\r\n<p>You are accumulating this quantity, which is not appropriate. &nbsp;It is already an accumulated value.&nbsp; <br>Therefore you'll need to use different arithmetic to accomplish what you want.</p>",
    "PostedDate": "2010-06-17T06:33:22.043-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "456753",
    "ThreadId": "216137",
    "Html": "<p>Ahh, I see.</p>\r\n<p>I've added &quot;TransferTotal = TransferTotal + backup.UncompressedSize&quot; to the extaction loop which works great.<br>Is there an extraction completion event I can use to update labels etc? For extracting I only see AfterExtractAll?</p>\r\n<p>Thanks.</p>",
    "PostedDate": "2010-06-17T08:09:22.933-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "456825",
    "ThreadId": "216137",
    "Html": "<p>Ah - when your app extracts entries in a loop, there's no way for the library to know when your app is done extracting.&nbsp; So... the way to update the labels when the extraction is done is to do so upon exit from your application's loop.</p>\r\n<p>ExtractAll is a special case - obviously at the end of that method it's possible to invoke an event, and AfterExtractAll is that event. &nbsp;</p>\r\n<p>I think it would be worthwhile to provide a similar event after ExtractSelectedItems() but... today I don't believe that there is such an event available.</p>\r\n<p>&nbsp;</p>",
    "PostedDate": "2010-06-17T09:46:37.843-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  }
]