如何在进度条中显示下载进度?视觉基础

How to show download progress in progressbar? Visual Basic

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

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

我不知道该怎么做。有人可以帮助我吗?

终于!我成功了,但没有使用 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

感谢大家对我的帮助!