【问题标题】:How to show download progress in progressbar? Visual Basic如何在进度条中显示下载进度?视觉基础
【发布时间】:2016-05-04 01:24:10
【问题描述】:

我很困惑,因为这段代码不起作用。它成功下载了文件,但不向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

我不知道如何进行这项工作。有人可以帮我吗?

【问题讨论】:

  • 来自 MSDN:您必须小心不要在 DoWork 事件处理程序中操作任何用户界面对象。相反,通过 ProgressChanged [...] 事件与用户界面进行通信。 打开 Option Strict 并研究 this example
  • 哎呀,忘了!谢谢你提醒我哈哈!
  • 如果有效,请不要忘记接受您自己的答案。它可以帮助未来的读者更快地识别工作答案。它还向社区表明这个问题已经解决,他们不需要付出任何努力来解决问题,他们可以专注于未回答的问题。

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


【解决方案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

感谢大家帮助我!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 2019-05-26
    • 2017-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多