VB2010:如何在具有进度条的后台工作程序中运行此提取过程

时间:2014-09-23 09:25:58

标签: vb.net visual-studio-2010

所以我做了一个小提取程序,它只是将一个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子放在主论坛上的后台工作者并调用它,但这根本不起作用,我还尝试了模块上的后台工作者,它提取但是进度条不起作用。有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

与使用BackgroundWorker的任何任务一样,您可以在DoWork事件处理程序中完成工作,然后调用ReportProgress来报告进度。这一行:

Form2.ProgressBar1.Maximum = zip.Entries.Count

和这一行:

Form2.ProgressBar1.Value = Form2.ProgressBar1.Value + 1

将不得不被ReportProgress的电话取代。在ProgressChanged事件处理程序中,您可以按照惯例执行操作,即更新ProgressBar