Multi Download

  • VB.NET

    Multi Download

    Hi Leute, da ich in meinem Programm Multi Download einbringen möchte hab ich es eben versucht. Es klappt auch, es lädt beide Zips runter, aber...

    Die Main Form "Form1" freezed ein. Aber warum? Ich benutze dazu eine BackgroundWorker, der für sich selber einen eigene Thread erstellt, und somit die Form1 nicht freezen dürfte. Wenn der Download von dem 2.Zip dann fertig ist, entfreezed die Form1 wieder und es wird im Downloader erst jetzt der Eintrag hinzugefügt.

    Ich weiß das ich irgendwas mit dem MutliThreading/BackgroundWorker flasch mache, aber was?

    Code :

    Download

    VB.NET-Quellcode

    1. Public Function beginDownload(ByVal lvi As ListViewItem)
    2. link = lvi.SubItems(3).Text
    3. destination = lvi.SubItems(1).Text & "\" & lvi.Text & ".zip"
    4. Dim doDownload As New System.ComponentModel.BackgroundWorker()
    5. doDownload.RunWorkerAsync(downloading(link, destination))
    6. Return Nothing
    7. End Function
    8. Public Function downloading(ByVal link As String, ByVal desti As String)
    9. stopper = New Stopwatch
    10. 'Stream zur Datei im Internet erstellen und Lokal
    11. Dim request As HttpWebRequest = HttpWebRequest.Create(link)
    12. Dim response As HttpWebResponse = request.GetResponse
    13. breader = New BinaryReader(response.GetResponseStream)
    14. fstream = New FileStream(destination, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)
    15. tBytes = response.ContentLength
    16. stopper.Start() 'Mit dem Timer messen wir, wieviele Bytes in der letzten Sekunde heruntergeladen wurden
    17. While (True)
    18. rBytes = breader.Read(buffering, 0, buffering.Length) 'Aus dem Download Stream lesen
    19. If rBytes = 0 Then
    20. Exit While 'Download ist abgeschlossen
    21. End If
    22. fstream.Write(buffering, 0, rBytes) 'Geladene Bytes lokal Speichern
    23. nowBytes += rBytes 'Anzahl gesammt gelesener Bytes erhöhen
    24. loaded_bytes += rBytes 'Anzahl der Bytes erhöhen die in der Letzten Sekunde geladen wurden
    25. If stopper.ElapsedMilliseconds >= 1000 Then 'Wenn eine Sekunde vergangen ist
    26. down_speed = 0
    27. down_speed = FormatNumber(loaded_bytes / 1024, 2) 'Geschwindigkeit berechnen
    28. loaded_bytes = 0 'und zähler zurücksetzen
    29. stopper.Reset() 'den Timer neustarten
    30. stopper.Start()
    31. End If
    32. 'Die Anzeige im Formular-Thread aktualisieren
    33. If down_speed < 1000 Then
    34. fortschritt_label.Text = down_speed & "KB"
    35. Else
    36. fortschritt_label.Text = down_speed & "MB"
    37. End If
    38. If Me.IsHandleCreated = True Then
    39. fortschritt_label.Invoke(New refreshGUIDel(AddressOf refreshGUI), New Object() {})
    40. End If
    41. End While
    42. 'Ressourcen Freigeben
    43. stopper.Stop()
    44. fstream.Close()
    45. breader.Close()
    46. Return Nothing
    47. End Function

    Aufruf in Form1

    VB.NET-Quellcode

    1. Private Sub WebBrowser1_Navigating(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserNavigatingEventArgs) Handles WebBrowser1.Navigating
    2. If e.Url.AbsoluteUri.Contains(".zip") Then
    3. e.Cancel = True
    4. Dim splitter() As String = Split(e.Url.AbsoluteUri, "/")
    5. Dim bit As String = splitter(splitter.Count - 2)
    6. Dim rn As String = bit.Replace("%20", " ")
    7. Dim lvi As New ListViewItem(rn)
    8. lvi.SubItems.Add(Application.StartupPath & "\Downloads")
    9. lvi.SubItems.Add("wird gedownloadet...")
    10. lvi.SubItems.Add(e.Url.AbsoluteUri)
    11. dowloader.downloads.Items.Add(lvi)
    12. dowloader.beginDownload(lvi)
    13. dowloader.Show()
    14. End If
    15. End Sub


    mfg