如何在进度条中显示下载进度? Visual Basic

时间:2016-05-04 01:24:10

标签: vb.net timer progress-bar backgroundworker webclient

我很困惑,因为这段代码没有用。它成功下载了文件,但没有向ProgressBar报告进度。我已在Timer1之前使用Timer1.Start()启动了BackgroundWorker2.RunWorkerAsync()

Dim size As Double
Private Sub BackgroundWorker2_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker2.DoWork
    Try
        Dim G As Integer = 150
        Dim Increase As Boolean = True
        Do Until Clicked = True
            If Increase = True Then
                If Not G = 255 Then
                    G += 1
                    Threading.Thread.Sleep(10)
                Else
                    Increase = False
                End If
            Else
                If Not G = 150 Then
                    G -= 1
                    Threading.Thread.Sleep(10)
                Else
                    Increase = True
                End If
            End If
            Label6.ForeColor = Color.FromArgb(0, G, 0)
        Loop
        Label6.Cursor = Cursors.Default
        Label6.Text = "Initializing"
        Label6.ForeColor = Color.Lime
        MessageBox.Show("Description :" & Environment.NewLine & Description & Environment.NewLine & Environment.NewLine & "Total Size: " & Environment.NewLine & TotalSize & Environment.NewLine & Environment.NewLine & "Download Link (Global): " & Environment.NewLine & DownlaodLink, "BIOS Update Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
        'WebBrowser1.Navigate(DownlaodLink)
        'BackgroundWorker1.RunWorkerAsync()
        ProgressBar1.Visible = True
        size = TotalSize.Replace(" MBytes", "")
        Me.Refresh()
        Dim wc As New WebClient
        wc.DownloadFileAsync(New Uri(DownlaodLink), My.Computer.FileSystem.SpecialDirectories.Desktop & "\A55BM-E BIOS " & LatestVersion.ToString.Replace(" ", "") & ".zip")
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

代码向我展示我的下载进度

Dim cursize As Double
Dim finsize As Double
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    If System.IO.File.Exists(My.Computer.FileSystem.SpecialDirectories.Desktop & "\A55BM-E BIOS " & LatestVersion.ToString.Replace(" ", "") & ".zip") Then
        cursize = My.Computer.FileSystem.GetFileInfo(My.Computer.FileSystem.SpecialDirectories.Desktop & "\A55BM-E BIOS " & LatestVersion.ToString.Replace(" ", "") & ".zip").Length
        finsize = cursize / size * 100

        If Not ProgressBar1.Value = ProgressBar1.Maximum Then
            ProgressBar1.Value = finsize
            ProgressBar1.Refresh()
        Else
            ProgressBar1.Value = finsize
            ProgressBar1.Refresh()
            Timer1.Stop()
            MsgBox("Finished Downloading")
        End If
    End If
End Sub

我无法弄清楚如何使这项工作。有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

最后!我使它工作但没有使用BackgroundWorker。下面的代码是我用来使这个东西工作的代码。它也非常高效且易于使用。

Public WithEvents downloader As WebClient

Public Sub DownloadStart()
    Label6.Cursor = Cursors.Default
    Label6.Text = "Initializing"
    Label6.ForeColor = Color.Lime
    MessageBox.Show("Description :" & Environment.NewLine & Description & Environment.NewLine & Environment.NewLine & "Total Size: " & Environment.NewLine & TotalSize & Environment.NewLine & Environment.NewLine & "Download Link (Global): " & Environment.NewLine & DownlaodLink, "BIOS Update Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
    ProgressBar1.Visible = True
    downloader = New WebClient
    downloader.DownloadFileAsync(New Uri(DownlaodLink), My.Computer.FileSystem.SpecialDirectories.Desktop & "\A55BM-E BIOS " & LatestVersion.ToString.Replace(" ", "") & ".zip")
End Sub

Private Sub downloader_DownloadProgressChanged(sender As Object, e As DownloadProgressChangedEventArgs) Handles downloader.DownloadProgressChanged
    ProgressBar1.Value = e.ProgressPercentage
End Sub

感谢大家帮助我!