Search code examples
vb.nettimerprogress-barbackgroundworkerwebclient

How to show download progress in progressbar? Visual Basic


im so confused because this code didn't work. It downloaded the file successfully but don't report the progress to the ProgressBar. I already started Timer1 using Timer1.Start() before 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

And the code to show me the progress of my download

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

I can't figure out how to make this work. Can someone help me?


Solution

  • Finally! I made it work but didn't go with the BackgroundWorker. The code below is what I've used to make this thing work. And it's so efficient and easy to use too.

    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
    

    Thanks everyone for helping me!