所以我做了一个小提取程序,它只是将一个zip文件提取到一个位置,它还显示了提取的进度。但问题是,无论何时提取大型拉链,程序都会在提取过程中冻结,如果您离开过程,则在完成提取之前不能再回到它,但您仍然可以看到进度条的进度。这是我到目前为止的代码:
Form2.vb
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
If TextBox1.Text = "" Then
Else
ProgressBar1.Visible = True
Button2.Enabled = False
Button3.Enabled = False
TextBox1.Enabled = False
Unzip("FileToExtract.zip", "PathToExtractTo")
End If
End Sub
Unzip.vb
Imports Ionic.Zip
Module SimpleUnzip
Public Sub Unzip(ByVal ZipToUnpack As String, ByVal DirectoryToExstractTo As String)
Try
Using zip As ZipFile = ZipFile.Read(ZipToUnpack)
Form2.ProgressBar1.Maximum = zip.Entries.Count
Dim entry As ZipEntry
For Each entry In zip
entry.Extract(DirectoryToExstractTo, ExtractExistingFileAction.OverwriteSilently)
Form2.ProgressBar1.Value = Form2.ProgressBar1.Value + 1
Next
End Using
Catch ex1 As Exception
End Try
End Sub
End Module
所以我尝试过将SimpleUnzip子放在主论坛上的后台工作者并调用它,但这根本不起作用,我还尝试了模块上的后台工作者,它提取但是进度条不起作用。有谁知道如何解决这个问题?
答案 0 :(得分:1)
与使用BackgroundWorker
的任何任务一样,您可以在DoWork
事件处理程序中完成工作,然后调用ReportProgress
来报告进度。这一行:
Form2.ProgressBar1.Maximum = zip.Entries.Count
和这一行:
Form2.ProgressBar1.Value = Form2.ProgressBar1.Value + 1
将不得不被ReportProgress
的电话取代。在ProgressChanged
事件处理程序中,您可以按照惯例执行操作,即更新ProgressBar
。