2016-05-04 2 views
0

ich bin so verwirrt, weil dieser Code nicht funktioniert hat. Es hat die Datei erfolgreich heruntergeladen, meldet jedoch den Fortschritt nicht an ProgressBar. Ich begann bereits Timer1 mit Timer1.Start() vor BackgroundWorker2.RunWorkerAsync().Wie kann ich den Download-Fortschritt in der Fortschrittsleiste anzeigen? Visual Basic

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 

Und der Code mir den Fortschritt meines 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 

ich herausfinden kann, nicht zeigen, wie diese Arbeit zu machen. Kann mir jemand helfen?

+0

Von MSDN: * Sie müssen darauf achten, keine Benutzeroberflächenobjekte in Ihrem DoWork-Ereignishandler zu bearbeiten. Stattdessen kommunizieren Sie über das ProgressChanged-Ereignis mit der Benutzeroberfläche. * Aktivieren Sie Option Strict und studieren Sie [dieses Beispiel] (https://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker .aspx) – Plutonix

+0

Opps, vergaß das! Danke, dass du mich erinnert hast, lol! –

+0

Vergessen Sie nicht, Ihre eigene Antwort zu akzeptieren, wenn es funktioniert hat. Es hilft zukünftigen Lesern, die funktionierende Antwort schneller zu identifizieren. Außerdem zeigt es der Community, dass diese Frage gelöst wurde und sie sich nicht bemühen müssen, das Problem zu lösen, und sie können sich auf nicht beantwortete Fragen konzentrieren. –

Antwort

0

Endlich! Ich habe es geschafft, aber ging nicht mit der BackgroundWorker. Der Code unten ist, was ich verwendet habe, um diese Sache funktionieren zu lassen. Und es ist so effizient und einfach zu bedienen.

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 

Danke an alle, die mir geholfen haben!