[
  {
    "Id": "858914",
    "ThreadId": "362461",
    "Html": "\r\n<p>Hi Can someone please help with this. Its working but freezing up the UI so after googling for a while, It was brought to my attention that you need to invoke via delegate. I have no clue how to do that But tried my best.&nbsp; ANY help will greately be\r\n appreciated.</p>\r\n<p>Also, I have one large File that is over 3GB and it will not update the progressbar. Its it even possible to update the Progressbar with one large file?</p>\r\n<p>Thanks in advance.</p>\r\n<p>&nbsp;</p>\r\n<p>&nbsp;</p>\r\n<p>&nbsp;&nbsp;&nbsp; Delegate Sub SetLabelTextInvokerZip(ByVal lblInfo As Label, ByVal Text As String, ByVal ProgBarZip As ProgressBar)</p>\r\n<p>&nbsp;&nbsp;&nbsp; Sub SetLabelTextZip(ByVal lblInfo As Label, ByVal Text As String, ByVal ProgBarZip As ProgressBar)<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If lblInfo.InvokeRequired = True Then<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lblInfo.BeginInvoke(New SetLabelTextInvokerZip(AddressOf SetLabelTextZip), lblInfo, Text, ProgBarZip)<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lblInfo.Text = Text<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ProgBarZip.Value = 0<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br>\r\n&nbsp;&nbsp;&nbsp; End Sub</p>\r\n<p>&nbsp;</p>\r\n<p>&nbsp;&nbsp;&nbsp; Sub Extract_Zip_Files()</p>\r\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim ZipToUnpack As String = &quot;C:\\temp\\1.zip&quot;<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim DirectoryToExstractTo As String = &quot;C:\\Temp\\Extract&quot;<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim ProgBarZip As Integer<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetLabelTextZip(lblInfo, &quot;start&quot;)</p>\r\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Try<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Using zip As ZipFile = ZipFile.Read(ZipToUnpack)<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ProgressBar2.Maximum = zip.Entries.Count<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim entry As ZipEntry<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For Each entry In zip<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lblInfo.Text = entry.FileName<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; entry.Extract(DirectoryToExstractTo, ExtractExistingFileAction.OverwriteSilently)<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ProgressBar2.Value = ProgressBar2.Value &#43; 1<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' sleep because it's too fast otherwise.<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Threading.Thread.Sleep(50)<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ProgressBar1.Value = 0<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetLabelTextZip(lblInfo, &quot;Done&quot;)<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End Using<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Catch ex As Exception<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox(&quot;Exception: &quot; &amp; ex.ToString())<br>\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End Try<br>\r\n&nbsp;&nbsp;&nbsp; End Sub</p>\r\n",
    "PostedDate": "2012-07-08T13:09:08.74-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "859679",
    "ThreadId": "362461",
    "Html": "\r\n<p>Hi All,</p>\r\n<p>I was able to get this to work after googling for a few days.&nbsp; The only challenge is that the progress bar does not get update. Can anyone help with it.&nbsp;</p>\r\n<p>&nbsp;I tried the following in the invoke section to no avail. ANY help will be greatly appreciated.</p>\r\n<p>&nbsp;<span style=\"color:green\">' Me.ProgressBar1.Value = 100 * e.BytesTransferred / e.TotalBytesToTransfer</span></p>\r\n<p><span style=\"font-size:9.5pt\"><span style=\"color:green\">' Me.ProgressBar1.Value = 100 * TranferTotal / TotalSize</span></span></p>\r\n<p><span style=\"font-size:9.5pt\"><span style=\"color:green\">' lblResults.Text = CStr(100 * (e.BytesTransferred / e.TotalBytesToTransfer).ToString(&quot;#,##0.00&quot;)) &amp; &quot;% Complete&quot;</span></span></p>\r\n<p><span style=\"font-size:9.5pt\"><span style=\"color:green\">'ProgressBar1.Value = <span style=\"color:#2b91af\">\r\nConvert</span>.ToInt32(100 * e.BytesTransferred / e.TotalBytesToTransfer)</span></span></p>\r\n<p>&nbsp;</p>\r\n<p><span style=\"color:blue; font-size:9.5pt\">Imports</span><span style=\"font-size:9.5pt\">Ionic.Zip</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;</span><span style=\"color:blue; font-size:9.5pt\">Imports</span><span style=\"font-size:9.5pt\"> System.Threading</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;</span></p>\r\n<p><span style=\"color:blue; font-size:9.5pt\">Public</span><span style=\"font-size:9.5pt\">\r\n<span style=\"color:blue\">Class</span> <span style=\"color:#2b91af\">Form1</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp; <span style=\"color:blue\">Private</span>\r\n<span style=\"color:blue\">Sub</span> Button1_Click(<span style=\"color:blue\">ByVal</span> sender\r\n<span style=\"color:blue\">As</span> System.<span style=\"color:#2b91af\">Object</span>,\r\n<span style=\"color:blue\">ByVal</span> e <span style=\"color:blue\">As</span> System.<span style=\"color:#2b91af\">EventArgs</span>)\r\n<span style=\"color:blue\">Handles</span> Button1.Click</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BackgroundWorker1.RunWorkerAsync()</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp; <span style=\"color:blue\">End</span>\r\n<span style=\"color:blue\">Sub</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp; <span style=\"color:blue\">Private</span>\r\n<span style=\"color:blue\">Sub</span> BackgroundWorker1_DoWork(sender <span style=\"color:blue\">\r\nAs</span> System.<span style=\"color:#2b91af\">Object</span>, e <span style=\"color:blue\">\r\nAs</span> System.ComponentModel.<span style=\"color:#2b91af\">DoWorkEventArgs</span>)\r\n<span style=\"color:blue\">Handles</span> BackgroundWorker1.DoWork</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lblResults.Text =\r\n<span style=\"color:blue\">Nothing</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DotNetZip_Extract_With_ProgressBar()</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp; <span style=\"color:blue\">End</span>\r\n<span style=\"color:blue\">Sub</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp; <span style=\"color:blue\">Private</span>\r\n<span style=\"color:blue\">Delegate</span> <span style=\"color:blue\">Sub</span> <span style=\"color:#2b91af\">\r\nZipProgress</span>(<span style=\"color:blue\">ByVal</span> e <span style=\"color:blue\">\r\nAs</span> <span style=\"color:#2b91af\">ExtractProgressEventArgs</span>)</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp; <span style=\"color:blue\">Private</span>\r\n<span style=\"color:blue\">Delegate</span> <span style=\"color:blue\">Sub</span> <span style=\"color:#2b91af\">\r\nExtractEntryProgress</span>(<span style=\"color:blue\">ByVal</span> e <span style=\"color:blue\">\r\nAs</span> <span style=\"color:#2b91af\">ExtractProgressEventArgs</span>)</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp; <span style=\"color:blue\">Private</span>\r\n<span style=\"color:blue\">Sub</span> zip_ExtractProgress(<span style=\"color:blue\">ByVal</span> sender\r\n<span style=\"color:blue\">As</span> <span style=\"color:blue\">Object</span>, <span style=\"color:blue\">\r\nByVal</span> e <span style=\"color:blue\">As</span> <span style=\"color:#2b91af\">ExtractProgressEventArgs</span>)</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StepEntryProgress(e)</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp; <span style=\"color:blue\">End</span>\r\n<span style=\"color:blue\">Sub</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp; <span style=\"color:blue\">Private</span>\r\n<span style=\"color:blue\">Sub</span> StepEntryProgress(<span style=\"color:blue\">ByVal</span> e\r\n<span style=\"color:blue\">As</span> <span style=\"color:#2b91af\">ExtractProgressEventArgs</span>)</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color:green\">\r\n'Dim TranferTotal As Integer</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color:green\">\r\n'&nbsp;&nbsp; TranferTotal = TranferTotal &#43; backup.UncompressedSize</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color:green\">\r\n' TranferTotal = e.BytesTransferred &#43; TranferTotal</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color:blue\">\r\nIf</span> <span style=\"color:blue\">Me</span>.ProgressBar1.InvokeRequired <span style=\"color:blue\">\r\nThen</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ProgressBar1.Invoke(<span style=\"color:blue\">New</span>\r\n<span style=\"color:#2b91af\">ExtractEntryProgress</span>(<span style=\"color:blue\">AddressOf</span>\r\n<span style=\"color:blue\">Me</span>.StepEntryProgress), <span style=\"color:blue\">New</span>\r\n<span style=\"color:blue\">Object</span>() {e})</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color:blue\">\r\nElse</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n<span style=\"color:blue\">If</span> ProgressBar1.Maximum = 100 <span style=\"color:blue\">\r\nThen</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ProgressBar1.Value =\r\n<span style=\"color:#2b91af\">Convert</span>.ToInt32(100 * e.BytesTransferred / e.TotalBytesToTransfer)</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color:green\">\r\n' Me.ProgressBar1.Value = 100 * e.BytesTransferred / e.TotalBytesToTransfer</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color:green\">\r\n' lblResults.Text = CStr(100 * (e.BytesTransferred / e.TotalBytesToTransfer).ToString(&quot;#,##0.00&quot;)) &amp; &quot;% Complete&quot;</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color:green\">\r\n' Me.ProgressBar1.Value = 100 * TranferTotal / TotalSize</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;</span><span style=\"font-size:9.5pt\">&nbsp;</span><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n<span style=\"color:blue\">Else</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lblResults.Text =\r\n<span style=\"color:#a31515\">&quot;Done&quot;</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n<span style=\"color:blue\">End</span> <span style=\"color:blue\">If</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color:blue\">\r\nEnd</span> <span style=\"color:blue\">If</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp; <span style=\"color:blue\">End</span>\r\n<span style=\"color:blue\">Sub</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp; <span style=\"color:blue\">Sub</span> DotNetZip_Extract_With_ProgressBar()</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color:blue\">\r\nDim</span> TotalSize = 0</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color:blue\">\r\nDim</span> TranferTotal <span style=\"color:blue\">As</span> <span style=\"color:blue\">\r\nInteger</span> = 0</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color:blue\">\r\nDim</span> ZipToUnpack <span style=\"color:blue\">As</span> <span style=\"color:blue\">\r\nString</span> = <span style=\"color:#a31515\">&quot;C:\\Temp\\1.zip&quot;</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color:blue\">\r\nDim</span> extractDir <span style=\"color:blue\">As</span> <span style=\"color:blue\">\r\nString</span> = <span style=\"color:#a31515\">&quot;C:\\Temp\\Extract&quot;</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color:blue\">\r\nUsing</span> zip <span style=\"color:blue\">As</span> <span style=\"color:#2b91af\">ZipFile</span> =\r\n<span style=\"color:#2b91af\">ZipFile</span>.Read(ZipToUnpack)</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n<span style=\"color:blue\">AddHandler</span> (zip.ExtractProgress), <span style=\"color:blue\">\r\nNew</span> <span style=\"color:#2b91af\">EventHandler</span>(<span style=\"color:blue\">Of</span>\r\n<span style=\"color:#2b91af\">ExtractProgressEventArgs</span>)(<span style=\"color:blue\">AddressOf</span>\r\n<span style=\"color:blue\">Me</span>.zip_ExtractProgress)</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n<span style=\"color:blue\">For</span> <span style=\"color:blue\">Each</span> backup <span style=\"color:blue\">\r\nIn</span> zip</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TotalSize = backup.UncompressedSize &#43; TotalSize</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n<span style=\"color:blue\">Next</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n<span style=\"color:blue\">For</span> <span style=\"color:blue\">Each</span> backup <span style=\"color:blue\">\r\nIn</span> zip</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; backup.Extract(extractDir, Ionic.Zip.<span style=\"color:#2b91af\">ExtractExistingFileAction</span>.OverwriteSilently)</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n<span style=\"color:blue\">Next</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color:blue\">\r\nEnd</span> <span style=\"color:blue\">Using</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;</span><span style=\"font-size:9.5pt\">&nbsp;&nbsp;\r\n<span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span></span></p>\r\n<p><span style=\"color:blue; font-size:9.5pt\">End</span><span style=\"font-size:9.5pt\">\r\n<span style=\"color:blue\">Class</span></span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;</span></p>\r\n<p><span style=\"font-size:9.5pt\">&nbsp;</span></p>\r\n<p>&nbsp;</p>\r\n<p>&nbsp;</p>\r\n",
    "PostedDate": "2012-07-10T07:14:03.613-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "859787",
    "ThreadId": "362461",
    "Html": "<p>Anyone?</p>",
    "PostedDate": "2012-07-10T10:11:15.21-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "859966",
    "ThreadId": "362461",
    "Html": "\r\n<p>I think you're going about it the wrong way. Put the required handlers in your BackgroundWorker_DoWork. It looks like you've done this step.</p>\r\n<p>&nbsp;</p>\r\n<div style=\"color:black; background-color:white\">\r\n<pre><span style=\"color:blue\">AddHandler</span> Zip.SaveProgress, <span style=\"color:blue\">New</span> EventHandler(Of SaveProgressEventArgs)(<span style=\"color:blue\">AddressOf</span> Zip_SaveProgress)\n<span style=\"color:blue\">AddHandler</span> Zip.AddProgress, <span style=\"color:blue\">New</span> EventHandler(Of AddProgressEventArgs)(<span style=\"color:blue\">AddressOf</span> Zip_AddProgress)</pre>\r\n</div>\r\n<div style=\"color:black; background-color:white\">\r\n<pre><span style=\"color:blue\">AddHandler</span> Zip.ExtractProgress, <span style=\"color:blue\">New</span> EventHandler(Of ExtractProgressEventArgs)(<span style=\"color:blue\">AddressOf</span> Zip_ExtractProgress)\n</pre>\r\n<pre><br></pre>\r\n<pre>Then create the appropriate subs (Zip_SaveProgress, Zip_AddProgress, Zip_ExtractProgress). It looks like you didn't do this step. here are some examples:</pre>\r\n<pre><div style=\"color:black; background-color:white\"><pre>    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> Zip_AddProgress(<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> AddProgressEventArgs)\n        <span style=\"color:blue\">If</span> bwWorker.CancellationPending <span style=\"color:blue\">Then</span> e.Cancel = <span style=\"color:blue\">True</span> <span style=\"color:green\">'If we press the stop button, invoke Cancel. RunWorkerCompleted will be called.</span>\n\n        <span style=\"color:blue\">Select</span> <span style=\"color:blue\">Case</span> e.EventType\n            <span style=\"color:blue\">Case</span> ZipProgressEventType.Adding_AfterAddEntry\n                SetStatusText(lang_Gathering &amp; <span style=\"color:#a31515\">&quot; &quot;</span> &amp; e.CurrentEntry.FileName.Substring(e.CurrentEntry.FileName.LastIndexOf(<span style=\"color:#a31515\">&quot;/&quot;</span>) &#43; 1, e.CurrentEntry.FileName.Length - e.CurrentEntry.FileName.LastIndexOf(<span style=\"color:#a31515\">&quot;/&quot;</span>) - 1))\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">Select</span>\n\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> Zip_SaveProgress(<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> SaveProgressEventArgs)\n        <span style=\"color:blue\">If</span> bwWorker.CancellationPending <span style=\"color:blue\">Then</span> e.Cancel = <span style=\"color:blue\">True</span> <span style=\"color:green\">'If we press the stop button, invoke Cancel. RunWorkerCompleted will be called.</span>\n\n        <span style=\"color:blue\">Select</span> <span style=\"color:blue\">Case</span> e.EventType\n            <span style=\"color:blue\">Case</span> ZipProgressEventType.Saving_AfterWriteEntry\n                bwBackup.ReportProgress(<span style=\"color:blue\">CInt</span>(Math.Truncate(100 * (e.EntriesSaved / e.EntriesTotal))))\n                SetStatusText(lang_Compressing &amp; <span style=\"color:#a31515\">&quot; &quot;</span> &amp; <span style=\"color:blue\">CInt</span>(Math.Truncate(100 * (e.EntriesSaved / e.EntriesTotal))) &amp; lang_PercentComplete)\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">Select</span>\n\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\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)\n        <span style=\"color:blue\">If</span> bwWorker.CancellationPending <span style=\"color:blue\">Then</span> e.Cancel = <span style=\"color:blue\">True</span> <span style=\"color:green\">'If we press the stop button, reset the variables we used for extracting, then invoke Cancel. RunWorkerCompleted will be called.</span>\n\n        <span style=\"color:blue\">Select</span> <span style=\"color:blue\">Case</span> e.EventType\n            <span style=\"color:blue\">Case</span> ZipProgressEventType.Extracting_BeforeExtractEntry\n                CurrentCount &#43;= 1\n                bwWorker.ReportProgress(<span style=\"color:blue\">CInt</span>(Math.Truncate(100 * (CurrentCount / TotalCount))))\n                SetStatusText(lang_Extracting &amp; <span style=\"color:#a31515\">&quot; &quot;</span> &amp; <span style=\"color:blue\">CInt</span>(Math.Truncate(100 * (CurrentCount / TotalCount))) &amp; lang_PercentComplete)\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">Select</span>\n\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\n</pre>\n</div>\n</pre>\r\n</div>\r\n<p>&nbsp;</p>\r\n<p>&nbsp;</p>\r\n<p>Enable the background worker's Report Progress. Then,</p>\r\n<p>&nbsp;</p>\r\n<div style=\"color:black; background-color:white\">\r\n<pre>    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> bwWorker_ProgressChanged(sender <span style=\"color:blue\">As</span> <span style=\"color:blue\">Object</span>, e <span style=\"color:blue\">As</span> System.ComponentModel.ProgressChangedEventArgs) <span style=\"color:blue\">Handles</span> bwbwWorker.ProgressChanged\n        ProgressBar.Value = e.ProgressPercentage\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\n</pre>\r\n</div>\r\n<p>&nbsp;</p>\r\n<p>You don't need to invoke controls if you report progress this way., Through the Zip_Add/Save/ExtractProgress subs, I am sending information to the background worker report sub via bwWorker.Report = Value, which then the progress bar uses (never invoked).</p>\r\n<p>&nbsp;</p>\r\n<p>The only invoke I use is SetStatusText, and honestly, I could probably get around that with the ReportProgress also.</p>\r\n<p>Do not sleep the thread because the progress bar doesn't keep up. This is a Windows theme (Vista&#43;) issue, and not a code problem.</p>\r\n<p>All of this information is available in the documentation. However, I remember having issues with this also.</p>\r\n",
    "PostedDate": "2012-07-10T14:29:32.047-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "860122",
    "ThreadId": "362461",
    "Html": "\r\n<p>Hi Aerowinder,</p>\r\n<p>Thanks for the suggestion. I am very new to vb.net so this a bit of a challenge for me. I've done the below as best to my knowledge and the files are extracting but no progress bar. If you create a window form and</p>\r\n<p>1) add a button, label, background worker and progress bar and add the below code you'll see what I'm talking about.&nbsp; The rem lines are having issues. Any help will&nbsp; greatly be appreciated.</p>\r\n<p>&nbsp;</p>\r\n<p>&nbsp;</p>\r\n<p>&nbsp;</p>\r\n<div style=\"color:black; background-color:white\">\r\n<pre><span style=\"color:blue\">Imports</span> Ionic.Zip\n<span style=\"color:blue\">Imports</span> System.Threading\n\n<span style=\"color:blue\">Public</span> <span style=\"color:blue\">Class</span> Form1\n\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Property</span> CurrentCount <span style=\"color:blue\">As</span> <span style=\"color:blue\">Integer</span>\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Property</span> TotalCount <span style=\"color:blue\">As</span> <span style=\"color:blue\">Integer</span>\n\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> Button1_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> Button1.Click\n        BackgroundWorker1.RunWorkerAsync()\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\n\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> BackgroundWorker1_ProgressChanged(sender <span style=\"color:blue\">As</span> <span style=\"color:blue\">Object</span>, e <span style=\"color:blue\">As</span> System.ComponentModel.ProgressChangedEventArgs) <span style=\"color:blue\">Handles</span> BackgroundWorker1.ProgressChanged\n        Label1.Text = <span style=\"color:#a31515\">&quot;&quot;</span>\n        ProgressBar1.Value = e.ProgressPercentage\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> BackgroundWorker1_DoWork(sender <span style=\"color:blue\">As</span> System.Object, e <span style=\"color:blue\">As</span> System.ComponentModel.DoWorkEventArgs) <span style=\"color:blue\">Handles</span> BackgroundWorker1.DoWork\n        <span style=\"color:blue\">Dim</span> TotalSize = 0\n        <span style=\"color:blue\">Dim</span> TranferTotal <span style=\"color:blue\">As</span> <span style=\"color:blue\">Integer</span> = 0\n        <span style=\"color:blue\">Dim</span> ZipToUnpack <span style=\"color:blue\">As</span> <span style=\"color:blue\">String</span> = <span style=\"color:#a31515\">&quot;C:\\temp\\1.zip&quot;</span>\n        <span style=\"color:blue\">Dim</span> extractDir <span style=\"color:blue\">As</span> <span style=\"color:blue\">String</span> = <span style=\"color:#a31515\">&quot;C:\\temp\\extract&quot;</span>\n\n        <span style=\"color:blue\">Using</span> zip <span style=\"color:blue\">As</span> ZipFile = ZipFile.Read(ZipToUnpack)\n            <span style=\"color:blue\">AddHandler</span> (zip.ExtractProgress), <span style=\"color:blue\">New</span> EventHandler(Of ExtractProgressEventArgs)(<span style=\"color:blue\">AddressOf</span> Zip_ExtractProgress)\n            <span style=\"color:blue\">AddHandler</span> zip.SaveProgress, <span style=\"color:blue\">New</span> EventHandler(Of SaveProgressEventArgs)(<span style=\"color:blue\">AddressOf</span> Zip_SaveProgress)\n            <span style=\"color:blue\">AddHandler</span> zip.AddProgress, <span style=\"color:blue\">New</span> EventHandler(Of AddProgressEventArgs)(<span style=\"color:blue\">AddressOf</span> Zip_AddProgress)\n            <span style=\"color:blue\">For</span> <span style=\"color:blue\">Each</span> backup <span style=\"color:blue\">In</span> zip\n                TotalSize = backup.UncompressedSize &#43; TotalSize\n            <span style=\"color:blue\">Next</span>\n            <span style=\"color:blue\">For</span> <span style=\"color:blue\">Each</span> backup <span style=\"color:blue\">In</span> zip\n                backup.Extract(extractDir, Ionic.Zip.ExtractExistingFileAction.OverwriteSilently)\n            <span style=\"color:blue\">Next</span>\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">Using</span>\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\n\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> Zip_AddProgress(<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> AddProgressEventArgs)\n        <span style=\"color:blue\">If</span> BackgroundWorker1.CancellationPending <span style=\"color:blue\">Then</span> e.Cancel = <span style=\"color:blue\">True</span> <span style=\"color:green\">'If we press the stop button, invoke Cancel. RunWorkerCompleted will be called.</span>\n\n        <span style=\"color:blue\">Select</span> <span style=\"color:blue\">Case</span> e.EventType\n            <span style=\"color:blue\">Case</span> ZipProgressEventType.Adding_AfterAddEntry\n                <span style=\"color:green\">'  Label1(lang_Gathering &amp; &quot; &quot; &amp; e.CurrentEntry.FileName.Substring(e.CurrentEntry.FileName.LastIndexOf(&quot;/&quot;) &#43; 1, e.CurrentEntry.FileName.Length - e.CurrentEntry.FileName.LastIndexOf(&quot;/&quot;) - 1))</span>\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">Select</span>\n\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\n\n    <span style=\"color:blue\">Private</span> <span style=\"color:blue\">Sub</span> Zip_SaveProgress(<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> SaveProgressEventArgs)\n        <span style=\"color:blue\">If</span> BackgroundWorker1.CancellationPending <span style=\"color:blue\">Then</span> e.Cancel = <span style=\"color:blue\">True</span> <span style=\"color:green\">'If we press the stop button, invoke Cancel. RunWorkerCompleted will be called.</span>\n\n        <span style=\"color:blue\">Select</span> <span style=\"color:blue\">Case</span> e.EventType\n            <span style=\"color:blue\">Case</span> ZipProgressEventType.Saving_AfterWriteEntry\n                BackgroundWorker1.ReportProgress(<span style=\"color:blue\">CInt</span>(Math.Truncate(100 * (e.EntriesSaved / e.EntriesTotal))))\n                <span style=\"color:green\">'    Label1(lang_Compressing &amp; &quot; &quot; &amp; CInt(Math.Truncate(100 * (e.EntriesSaved / e.EntriesTotal))) &amp; lang_PercentComplete)</span>\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">Select</span>\n\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\n\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)\n        <span style=\"color:blue\">If</span> BackgroundWorker1.CancellationPending <span style=\"color:blue\">Then</span> e.Cancel = <span style=\"color:blue\">True</span> <span style=\"color:green\">'If we press the stop button, reset the variables we used for extracting, then invoke Cancel. RunWorkerCompleted will be called.</span>\n\n        <span style=\"color:blue\">Select</span> <span style=\"color:blue\">Case</span> e.EventType\n            <span style=\"color:blue\">Case</span> ZipProgressEventType.Extracting_BeforeExtractEntry\n                CurrentCount &#43;= 1\n                <span style=\"color:green\">'    BackgroundWorker1.ReportProgress(CInt(Math.Truncate(100 * (CurrentCount / TotalCount))))</span>\n                <span style=\"color:green\">'   Label1(lang_Extracting &amp; &quot; &quot; &amp; CInt(Math.Truncate(100 * (CurrentCount / TotalCount))) &amp; lang_PercentComplete)</span>\n        <span style=\"color:blue\">End</span> <span style=\"color:blue\">Select</span>\n    <span style=\"color:blue\">End</span> <span style=\"color:blue\">Sub</span>\n<span style=\"color:blue\">End</span> <span style=\"color:blue\">Class</span>\n\n</pre>\r\n</div>\r\n",
    "PostedDate": "2012-07-10T21:06:34.76-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "860536",
    "ThreadId": "362461",
    "Html": "<p>First of all, if you are not using Zip.Add/SaveProgress, remove them and their AddHandler line.<br /><br /><br /><br /><br /><br />Then, in Visual Studio, right click the solution, and go to properties. Click the compile tab. Option explicit: on. Option strict: on. This requires you to declare every variable with a type. These options should be on by default. A couple examples:<br />\r\n<div style=\"color: black; background-color: white;\">\r\n<pre><span style=\"color: blue;\">Dim</span> TotalSize = 0\r\n</pre>\r\n</div>\r\n<br />This method of coding forms bad habits. It should read:<br />\r\n<div style=\"color: black; background-color: white;\">\r\n<pre><span style=\"color: blue;\">Dim</span> TotalSize <span style=\"color: blue;\">As</span> <span style=\"color: blue;\">Long</span>\r\n</pre>\r\n</div>\r\n</p>\r\n<p><br />It will be zero automatically.<br /><br /><br />And this:</p>\r\n<div style=\"color: black; background-color: white;\">\r\n<pre><span style=\"color: blue;\">For</span> <span style=\"color: blue;\">Each</span> backup <span style=\"color: blue;\">In</span> zip\r\nTotalSize = backup.UncompressedSize + TotalSize\r\n<span style=\"color: blue;\">Next</span></pre>\r\n</div>\r\n<p>Should be more like this</p>\r\n<div style=\"color: black; background-color: white;\">\r\n<pre><span style=\"color: blue;\">For</span> <span style=\"color: blue;\">Each</span> entry <span style=\"color: blue;\">As</span> ZipEntry <span style=\"color: blue;\">In</span> zip.Entries\r\nTotalSize += backup.UncompressedSize\r\n<span style=\"color: blue;\">Next</span></pre>\r\n</div>\r\n<p>The math probably doesn't check out.<br /><br /><br /><br /><br /><br /><br />The commented text Label1(.....) will not work, because this needs to be delegated in order to be used that way. The proper way to do that, is like this:</p>\r\n<p>&nbsp;</p>\r\n<div style=\"color: black; background-color: white;\">\r\n<pre><span style=\"color: blue;\">Private</span> <span style=\"color: blue;\">Delegate</span> <span style=\"color: blue;\">Sub</span> SetStatusTextInvoker(<span style=\"color: blue;\">ByVal</span> Text <span style=\"color: blue;\">As</span> <span style=\"color: blue;\">String</span>)\r\n<span style=\"color: blue;\">Private</span> <span style=\"color: blue;\">Sub</span> SetStatusText(<span style=\"color: blue;\">ByVal</span> Text <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: blue;\">    Me</span>.Invoke(<span style=\"color: blue;\">New</span> SetStatusTextInvoker(<span style=\"color: blue;\">AddressOf</span> SetStatusText), Text)\r\n<span style=\"color: blue;\">  Else</span>\r\n    StatusTS.Text = 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;\">Sub</span></pre>\r\n</div>\r\n<p>The label in this case, on the form, is named StatusTS. If you want to update it through another thread (like you are trying to do), you need to address it as SetStatusText(text here). And this will update the label from your worker thread.<br /><br /><br /><br /><br />Don't clear the label in the BackgroundWorker1_ProgressChanged. Either update it here directly, or use the delegate and update it in the Zip_ExtractProgress.</p>",
    "PostedDate": "2012-07-11T14:09:45.307-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "860565",
    "ThreadId": "362461",
    "Html": "<p>Thanks again Aerowinder,&nbsp; I tried to clean it up as suggested.&nbsp; There is still an issue with the rem line. Not sure why the progressbar is not updating.&nbsp; If you feel like, I would greatly appreciate it.&nbsp; Thanks again.</p>\r\n<p>&nbsp;</p>\r\n<p>&nbsp;</p>\r\n<div style=\"color: black; background-color: white;\">\r\n<pre><span style=\"color: blue;\">Imports</span> Ionic.Zip\r\n<span style=\"color: blue;\">Imports</span> System.Threading\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;\">Property</span> CurrentCount <span style=\"color: blue;\">As</span> <span style=\"color: blue;\">Integer</span>\r\n    <span style=\"color: blue;\">Private</span> <span style=\"color: blue;\">Property</span> TotalCount <span style=\"color: blue;\">As</span> <span style=\"color: blue;\">Integer</span>\r\n\r\n    <span style=\"color: blue;\">Private</span> <span style=\"color: blue;\">Sub</span> Button1_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> Button1.Click\r\n        BackgroundWorker1.RunWorkerAsync()\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> BackgroundWorker1_ProgressChanged(sender <span style=\"color: blue;\">As</span> <span style=\"color: blue;\">Object</span>, e <span style=\"color: blue;\">As</span> System.ComponentModel.ProgressChangedEventArgs) <span style=\"color: blue;\">Handles</span> BackgroundWorker1.ProgressChanged\r\n        ProgressBar1.Value = e.ProgressPercentage\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;\">Delegate</span> <span style=\"color: blue;\">Sub</span> SetStatusTextInvoker(<span style=\"color: blue;\">ByVal</span> Text <span style=\"color: blue;\">As</span> <span style=\"color: blue;\">String</span>)\r\n    <span style=\"color: blue;\">Private</span> <span style=\"color: blue;\">Sub</span> SetStatusText(<span style=\"color: blue;\">ByVal</span> Text <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: blue;\">Me</span>.Invoke(<span style=\"color: blue;\">New</span> SetStatusTextInvoker(<span style=\"color: blue;\">AddressOf</span> SetStatusText), Text)\r\n        <span style=\"color: blue;\">Else</span>\r\n            Label1.Text = 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;\">Sub</span>\r\n\r\n    <span style=\"color: blue;\">Private</span> <span style=\"color: blue;\">Sub</span> BackgroundWorker1_DoWork(sender <span style=\"color: blue;\">As</span> System.Object, e <span style=\"color: blue;\">As</span> System.ComponentModel.DoWorkEventArgs) <span style=\"color: blue;\">Handles</span> BackgroundWorker1.DoWork\r\n        <span style=\"color: blue;\">Dim</span> TotalSize <span style=\"color: blue;\">As</span> <span style=\"color: blue;\">Long</span>\r\n        <span style=\"color: blue;\">Dim</span> ZipToUnpack <span style=\"color: blue;\">As</span> <span style=\"color: blue;\">String</span> = <span style=\"color: #a31515;\">\"C:\\temp\\1.zip\"</span>\r\n        <span style=\"color: blue;\">Dim</span> extractDir <span style=\"color: blue;\">As</span> <span style=\"color: blue;\">String</span> = <span style=\"color: #a31515;\">\"C:\\temp\\extract\"</span>\r\n\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> Zip_ExtractProgress)\r\n            <span style=\"color: blue;\">For</span> <span style=\"color: blue;\">Each</span> Entry <span style=\"color: blue;\">As</span> ZipEntry <span style=\"color: blue;\">In</span> zip.Entries\r\n                TotalSize += Entry.UncompressedSize\r\n            <span style=\"color: blue;\">Next</span>\r\n            <span style=\"color: blue;\">For</span> <span style=\"color: blue;\">Each</span> Entry <span style=\"color: blue;\">As</span> ZipEntry <span style=\"color: blue;\">In</span> zip.Entries\r\n                Entry.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        <span style=\"color: blue;\">If</span> BackgroundWorker1.CancellationPending <span style=\"color: blue;\">Then</span>\r\n            e.Cancel = <span style=\"color: blue;\">True</span> <span style=\"color: green;\">'If we press the stop button, reset the variables we used for extracting, then invoke Cancel. RunWorkerCompleted will be called.</span>\r\n        <span style=\"color: blue;\">End</span> <span style=\"color: blue;\">If</span>\r\n\r\n        <span style=\"color: blue;\">Select</span> <span style=\"color: blue;\">Case</span> e.EventType\r\n            <span style=\"color: blue;\">Case</span> ZipProgressEventType.Extracting_BeforeExtractEntry\r\n                <span style=\"color: blue;\">Dim</span> lang_Extracting <span style=\"color: blue;\">As</span> <span style=\"color: blue;\">Integer</span>\r\n                <span style=\"color: blue;\">Dim</span> lang_PercentComplete <span style=\"color: blue;\">As</span> <span style=\"color: blue;\">Integer</span>\r\n\r\n                CurrentCount += 1\r\n                BackgroundWorker1.ReportProgress(<span style=\"color: blue;\">CInt</span>(Math.Truncate(100 * (CurrentCount / TotalCount))))\r\n                <span style=\"color: green;\">'   Label1(lang_Extracting &amp; \" \" &amp; CInt(Math.Truncate(100 * (CurrentCount / TotalCount))) &amp; lang_PercentComplete)</span>\r\n        <span style=\"color: blue;\">End</span> <span style=\"color: blue;\">Select</span>\r\n    <span style=\"color: blue;\">End</span> <span style=\"color: blue;\">Sub</span>\r\n\r\n<span style=\"color: blue;\">End</span> <span style=\"color: blue;\">Class</span>\r\n\r\n\r\n</pre>\r\n</div>",
    "PostedDate": "2012-07-11T15:28:44.203-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "860569",
    "ThreadId": "362461",
    "Html": "<p>When you have an error message, you need to tell me what it is, so I don't have to guess.&nbsp;The variables I gave you earlier came from code from one of my programs. It was not made for your program, and as such, you need to adapt it to fit your own code.</p>\r\n<p>&nbsp;</p>\r\n<p>Let me tell you what I see:</p>\r\n<pre><span>Dim</span> lang_Extracting <span>As</span> <span>Integer</span>\r\n<span>Dim</span> lang_PercentComplete <span>As</span> <span>Integer</span></pre>\r\n<pre>Get rid of these. They aren't necessary for your program.</pre>\r\n<p>&nbsp;</p>\r\n<p>CurrentCount is not doing what you want. Here is what it is doing (why is it a Property, by the way?). Before each file is extracted, CurrentCount is incremented by 1. This is not what you want.</p>\r\n<p>TotalCount obtains total uncompressed size for all entries. Looks good.</p>\r\n<p>&nbsp;</p>\r\n<p>You are attempting to divide CurrentCount / TotalCount as your progress bar value. Think about the math behind this, and you will understand why it's wrong. Entry count / uncompressed entry size.&nbsp;Use&nbsp;ZipProgressEventType.Extracting_EntryBytesWritten instead.</p>\r\n<p>&nbsp;</p>\r\n<pre><span>Label1(lang_Extracting &amp; \" \" &amp; CInt(Math.Truncate(100 * (CurrentCount / TotalCount))) &amp; lang_PercentComplete)</span></pre>\r\n<pre><span>I told you how to fix this already.</span></pre>",
    "PostedDate": "2012-07-11T15:41:52.99-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "860769",
    "ThreadId": "362461",
    "Html": "<p>Thanks again Aerowinder for your time.&nbsp; This code I got via google,&nbsp;being this is my first project I'm lost as to what to do here. It is working but not progressbar update.</p>\r\n<div style=\"color: black; background-color: white;\">\r\n<pre>\r\n\r\n<span style=\"color: blue;\">Imports</span> Ionic.Zip\r\n<span style=\"color: blue;\">Imports</span> System.Threading\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;\">Property</span> CurrentCount <span style=\"color: blue;\">As</span> <span style=\"color: blue;\">Integer</span>\r\n    <span style=\"color: blue;\">Private</span> <span style=\"color: blue;\">Property</span> TotalCount <span style=\"color: blue;\">As</span> <span style=\"color: blue;\">Integer</span>\r\n\r\n    <span style=\"color: blue;\">Private</span> <span style=\"color: blue;\">Sub</span> Button1_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> Button1.Click\r\n        BackgroundWorker1.RunWorkerAsync()\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> BackgroundWorker1_ProgressChanged(sender <span style=\"color: blue;\">As</span> <span style=\"color: blue;\">Object</span>, e <span style=\"color: blue;\">As</span> System.ComponentModel.ProgressChangedEventArgs) <span style=\"color: blue;\">Handles</span> BackgroundWorker1.ProgressChanged\r\n        ProgressBar1.Value = e.ProgressPercentage\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;\">Delegate</span> <span style=\"color: blue;\">Sub</span> SetStatusTextInvoker(<span style=\"color: blue;\">ByVal</span> Text <span style=\"color: blue;\">As</span> <span style=\"color: blue;\">String</span>)\r\n    <span style=\"color: blue;\">Private</span> <span style=\"color: blue;\">Sub</span> SetStatusText(<span style=\"color: blue;\">ByVal</span> Text <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: blue;\">Me</span>.Invoke(<span style=\"color: blue;\">New</span> SetStatusTextInvoker(<span style=\"color: blue;\">AddressOf</span> SetStatusText), Text)\r\n        <span style=\"color: blue;\">Else</span>\r\n            Label1.Text = 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;\">Sub</span>\r\n\r\n    <span style=\"color: blue;\">Private</span> <span style=\"color: blue;\">Sub</span> BackgroundWorker1_DoWork(sender <span style=\"color: blue;\">As</span> System.Object, e <span style=\"color: blue;\">As</span> System.ComponentModel.DoWorkEventArgs) <span style=\"color: blue;\">Handles</span> BackgroundWorker1.DoWork\r\n        <span style=\"color: blue;\">Dim</span> TotalSize <span style=\"color: blue;\">As</span> <span style=\"color: blue;\">Long</span>\r\n        <span style=\"color: blue;\">Dim</span> ZipToUnpack <span style=\"color: blue;\">As</span> <span style=\"color: blue;\">String</span> = <span style=\"color: #a31515;\">\"C:\\temp\\1.zip\"</span>\r\n        <span style=\"color: blue;\">Dim</span> extractDir <span style=\"color: blue;\">As</span> <span style=\"color: blue;\">String</span> = <span style=\"color: #a31515;\">\"C:\\temp\\extract\"</span>\r\n\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(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> Zip_ExtractProgress)\r\n\r\n                <span style=\"color: blue;\">For</span> <span style=\"color: blue;\">Each</span> Entry <span style=\"color: blue;\">As</span> ZipEntry <span style=\"color: blue;\">In</span> zip.Entries\r\n                    TotalSize += Entry.UncompressedSize\r\n                <span style=\"color: blue;\">Next</span>\r\n                <span style=\"color: blue;\">For</span> <span style=\"color: blue;\">Each</span> Entry <span style=\"color: blue;\">As</span> ZipEntry <span style=\"color: blue;\">In</span> zip.Entries\r\n                    Entry.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;\">Catch</span> EX <span style=\"color: blue;\">As</span> Exception\r\n            MessageBox.Show(EX.Message)\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> 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> BackgroundWorker1.CancellationPending <span style=\"color: blue;\">Then</span>\r\n            e.Cancel = <span style=\"color: blue;\">True</span> <span style=\"color: green;\">'If we press the stop button, reset the variables we used for extracting, then invoke Cancel. RunWorkerCompleted will be called.</span>\r\n        <span style=\"color: blue;\">End</span> <span style=\"color: blue;\">If</span>\r\n\r\n        <span style=\"color: blue;\">Select</span> <span style=\"color: blue;\">Case</span> e.EventType\r\n            <span style=\"color: blue;\">Case</span> ZipProgressEventType.Extracting_EntryBytesWritten\r\n\r\n                <span style=\"color: blue;\">Dim</span> Entry <span style=\"color: blue;\">As</span> <span style=\"color: blue;\">Integer</span>\r\n                <span style=\"color: blue;\">Dim</span> CurrentCount <span style=\"color: blue;\">As</span> <span style=\"color: blue;\">Integer</span> = Entry\r\n    \r\n                BackgroundWorker1.ReportProgress(<span style=\"color: blue;\">CInt</span>(Int((100 * (CurrentCount / TotalCount)))))\r\n        <span style=\"color: blue;\">End</span> <span style=\"color: blue;\">Select</span>\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\r\n\r\n</pre>\r\n</div>",
    "PostedDate": "2012-07-12T04:13:14.85-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "862290",
    "ThreadId": "362461",
    "Html": "<p>Anyone?</p>",
    "PostedDate": "2012-07-12T14:20:28.397-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  },
  {
    "Id": "862294",
    "ThreadId": "362461",
    "Html": "\r\n<p>I can't use this forum for posting any more code. It is utterly terrible. I can speak to you on VoIP (Ventrilo/Mumble) if you are interested (email me through the board).</p>\r\n<p>&nbsp;</p>\r\n<p>But the problem is with this code:</p>\r\n<pre>                <span>Dim</span> Entry <span>As</span> <span>Integer</span>\n                <span>Dim</span> CurrentCount <span>As</span> <span>Integer</span> = Entry\n    \n                BackgroundWorker1.ReportProgress(<span>CInt</span>(Int((100 * (CurrentCount / TotalCount)))))</pre>\r\n<p>What do you expect it to do? I need you to walk me through how you think this should work (VoIP is best).</p>\r\n",
    "PostedDate": "2012-07-12T14:21:32.72-07:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  }
]