DotNetZip Помочь Прогрессу
По какой-то причине, когда я пытаюсь распаковать zip-файл, он не обновляет индикатор выполнения, любая помощь будет приветствоваться.
Imports Ionic.Zip Imports System.Threading Public Class Form1 Private Property CurrentCount As Integer Private Property TotalCount As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click BackgroundWorker1.RunWorkerAsync() End Sub Private Sub BackgroundWorker1_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged ProgressBar1.Value = e.ProgressPercentage End Sub Private Delegate Sub SetStatusTextInvoker(ByVal Text As String) Private Sub SetStatusText(ByVal Text As String) If Me.InvokeRequired Then Me.Invoke(New SetStatusTextInvoker(AddressOf SetStatusText), Text) Else Label1.Text = Text End If End Sub Private Sub BackgroundWorker1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork Dim TotalSize As Long Dim ZipToUnpack As String = "C:\temp\1.zip" Dim extractDir As String = "C:\temp\extract" Try Using zip As ZipFile = ZipFile.Read(ZipToUnpack) AddHandler (zip.ExtractProgress), New EventHandler(Of ExtractProgressEventArgs)(AddressOf Zip_ExtractProgress) For Each Entry As ZipEntry In zip.Entries TotalSize += Entry.UncompressedSize Next For Each Entry As ZipEntry In zip.Entries Entry.Extract(extractDir, Ionic.Zip.ExtractExistingFileAction.OverwriteSilently) Next End Using Catch EX As Exception MessageBox.Show(EX.Message) End Try End Sub Private Sub Zip_ExtractProgress(ByVal sender As Object, ByVal e As ExtractProgressEventArgs) If BackgroundWorker1.CancellationPending Then e.Cancel = True 'If we press the stop button, reset the variables we used for extracting, then invoke Cancel. RunWorkerCompleted will be called. End If Select Case e.EventType Case ZipProgressEventType.Extracting_EntryBytesWritten Dim Entry As Integer Dim CurrentCount As Integer = Entry BackgroundWorker1.ReportProgress(CInt(Int((100 * (CurrentCount / TotalCount))))) End Select End Sub End Class