Moin Leute,
ich habe einen Multi-Downloader gebaut, der pro Instanz immer einen File downloaden soll:
Spoiler anzeigen
Nun betreibe ich diese Klasse parallel in 8 Instanzen.
Leider downloaden immer nur gleichzeitig 2 Instanzen, wenn die fertig sind, starten die nächsten beiden Instanzen usw.
Wie kann ich das Download richtig parallelisieren?
ich habe einen Multi-Downloader gebaut, der pro Instanz immer einen File downloaden soll:
VB.NET-Quellcode
- Imports System.Net
- Imports System.Data
- Imports System.Threading
- Public Class MyDownload
- Public Event DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs)
- Public Event DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
- Private WithEvents _Downloader As WebClient
- Private _Thread As Thread ' Download-Thread
- Public ReadOnly _Index As Integer ' Index für Multi-Download
- Private _FileName As String ' Save As ...
- Private _Uri As Uri ' Source
- Public Sub New(index As Integer)
- _Downloader = New WebClient
- _Index = index
- _Thread = Nothing
- End Sub
- Public Sub DownloadFileAsync(ByVal url As Uri, ByVal FileName As String)
- _FileName = FileName
- _Uri = url
- ' jedes Mal ein neuer Thread
- If _Thread Is Nothing OrElse Not _Thread.IsAlive Then
- _Thread = New Thread(AddressOf StartThread)
- End If
- _Thread.Start()
- End Sub
- Private Sub StartThread()
- _Downloader.DownloadFileAsync(Me._Uri, Me._FileName)
- End Sub
- Public Sub CancelAsync()
- _Downloader.CancelAsync()
- End Sub
- Private Sub downloader_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles _Downloader.DownloadProgressChanged
- RaiseEvent DownloadProgressChanged(Me, e)
- End Sub
- Private Sub downloader_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles _Downloader.DownloadFileCompleted
- Dim fi As New System.IO.FileInfo(_FileName)
- If (fi.Length = 0) Then
- fi.Delete()
- End If
- RaiseEvent DownloadFileCompleted(Me, e)
- End Sub
- End Class
Nun betreibe ich diese Klasse parallel in 8 Instanzen.
Leider downloaden immer nur gleichzeitig 2 Instanzen, wenn die fertig sind, starten die nächsten beiden Instanzen usw.
Wie kann ich das Download richtig parallelisieren?
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert!
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert!