|
| Autor |
Nachricht |
bluedead Newbie

Anmeldedatum: 25.03.2011 Beiträge: 3
|
Download mit Backgroundworker sehr langsam :(
Verfasst am: 25.03.2011, 01:11 |
|
|
| Code: |
Imports System.IO
Imports System.Net
Imports System.ComponentModel
Public Class Form1
Dim watch As Long
Private th As BackgroundWorker
Dim speed1 As Long = 0
Dim speed2 As Long = 0
Dim Temp As String = Environment.GetEnvironmentVariable("Temp")
Dim Patcherver As String = "1.0"
Dim MyPfad As String = Path.GetDirectoryName(Application.ExecutablePath)
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
End
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Call DownloadItem("http://****-********.**/************/test/filesizes.txt", "filesizes.txt", Temp)
Me.ProgressBar1.Value = 0
th.RunWorkerAsync()
Timer1.Enabled = True
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Process.Start(MyPfad & "\**** ******** Config.exe")
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Form2.Show()
th = New BackgroundWorker
AddHandler th.DoWork, AddressOf th_DoWork
AddHandler th.RunWorkerCompleted, AddressOf th_Completed
AddHandler th.ProgressChanged, AddressOf th_ProgressChanged
th.WorkerReportsProgress = True
th.WorkerSupportsCancellation = True
Call DownloadItem("http://****-********.**/************/test/data.txt", "data.txt", Temp)
Call Newsleser()
Dim client As New Net.WebClient
Dim ServerPatcherVer As String = client.DownloadString("http://****-********.**/************/patcher/patcherver.ini")
If Not Patcherver = ServerPatcherVer Then
MsgBox("Neuer Patcher wird heruntengeladen!", MsgBoxStyle.Information, "Veralteter Patcher")
IO.File.WriteAllBytes(MyPfad & "\PatcherUpdate.exe", My.Resources.PatcherUpdate)
Process.Start(MyPfad & "\PatcherUpdate.exe")
End
Else
If File.Exists(MyPfad & "\PatcherUpdate.exe") Then
File.Delete(MyPfad & "\PatcherUpdate.exe")
End If
End If
End Sub
Private Sub DownloadItem(ByVal sURL As String, _
ByVal strFile As String, ByVal strFolder As String)
Dim webreq As HttpWebRequest
Dim webresp As HttpWebResponse
Dim bReader As BinaryReader
Dim bWriter As BinaryWriter
Dim stream As FileStream
Dim buffer() As Byte = New Byte(1024) {}
Dim bytesRead As Integer
' Fortschritt zunächst auf 0% setzen
Me.ProgressBar1.Value = 0
Try
' Datei-Download via HTTP "anfordern"
webreq = HttpWebRequest.Create(sURL)
webresp = webreq.GetResponse
' Download-Größe
Me.ProgressBar1.Maximum = webresp.ContentLength
' lokale Datei öffnen
stream = New FileStream(strFolder & "\" & strFile, FileMode.Create)
bReader = New BinaryReader(webresp.GetResponseStream)
bWriter = New BinaryWriter(stream)
' Datei blockweise downloaden und lokal speichern
Do
bytesRead = bReader.Read(buffer, 0, 1024)
bWriter.Write(buffer, 0, bytesRead)
ProgressBar1.Value += bytesRead
ProgressBar1.Update()
If watch = 0 Then
speed1 = ProgressBar1.Value
watch = 1
End If
If watch = 1 Then
speed2 = ProgressBar1.Value - speed1
watch = 0
Me.Text = "**** ******** Patcher @ " & strFile & " " & Math.Round((speed1 / 1024), 2) & "kb von " & Math.Round(Me.ProgressBar1.Maximum / 1024, 2) & "kb"
End If
Loop Until bytesRead = 0
' alle Dateien schließen
bWriter.Close()
bReader.Close()
stream.Close()
Catch ex As Exception
' Bei Fehler...
MessageBox.Show("Fehler: " & vbCrLf & ex.Message, _
"Fehler", MessageBoxButtons.OK, _
MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
End Try
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Process.Start("http://****-********.**")
End Sub
Private Sub th_doWork(ByVal sender As Object, ByVal e As DoWorkEventArgs)
Dim File(307) As String
Dim Size(307) As String
Dim LocalSize As String
Dim strTeile(1) As String
Dim i As Integer
Dim fs As IO.FileStream = New IO.FileStream( _
Temp & "\filesizes.txt", IO.FileMode.Open, _
IO.FileAccess.Read)
Dim w As IO.StreamReader = New IO.StreamReader(fs)
Dim aktuelleDatei As String
If Not Directory.Exists(MyPfad & "\BGM") Then
Directory.CreateDirectory(MyPfad & "\BGM")
End If
If Not Directory.Exists(MyPfad & "\lib") Then
Directory.CreateDirectory(MyPfad & "\lib")
End If
If Not Directory.Exists(MyPfad & "\mark") Then
Directory.CreateDirectory(MyPfad & "\mark")
End If
If Not Directory.Exists(MyPfad & "\miles") Then
Directory.CreateDirectory(MyPfad & "\miles")
End If
If Not Directory.Exists(MyPfad & "\pack") Then
Directory.CreateDirectory(MyPfad & "\pack")
End If
If Not Directory.Exists(MyPfad & "\upload") Then
Directory.CreateDirectory(MyPfad & "\upload")
End If
For i = 1 To 307
strTeile = w.ReadLine.Split("=")
File(i) = strTeile(0)
Size(i) = strTeile(1)
aktuelleDatei = MyPfad & "\" & File(i)
Me.ProgressBar2.Maximum = 307
Me.ProgressBar2.Value = i
Dim vorhanden As Boolean = My.Computer.FileSystem.GetFileInfo(aktuelleDatei).Exists()
If vorhanden = True Then
LocalSize = My.Computer.FileSystem.GetFileInfo(MyPfad & "\" & File(i)).Length
End If
If vorhanden = False Or Not Size(i) = LocalSize Then
Call DownloadItem("http://****-********.**/************/patcher/" & File(i), File(i), MyPfad & "\")
End If
Next
Process.Start(MyPfad & "\**** ******** Client.exe")
End Sub
Private Sub th_Completed(ByVal sender As Object, _
ByVal e As RunWorkerCompletedEventArgs)
Dim strFinished As String = String.Empty
If e.Cancelled Then
strFinished = "Operation Cancelled"
ElseIf e.Error IsNot Nothing Then
strFinished = "Operation Error " & e.Error.Message
Else
strFinished = "Operation Sucessfull"
End If
End Sub
Private Sub th_ProgressChanged(ByVal sender As Object, _
ByVal e As ProgressChangedEventArgs)
Try
Catch ex As Exception
End Try
End Sub
End Class
|
Mein Problem ist, das der Download der einzelnen Dateien mit dem Backgroundworker nur max. 10KBit schnell ist, wenn ich das Projekt aber ohne umsetze lade ich mit 2,8MBit herunter aber die GUI hängt sich augenscheinlich auf.
Wo könnte mein Fehler sein?
Immer offen für Verbesserungsvorschläge.
LG Bluedead |
|
| |
|
 |
bluedead Newbie

Anmeldedatum: 25.03.2011 Beiträge: 3
|
Verfasst am: 25.03.2011, 06:34 |
|
|
Fehler gefunden ^^
| Code: |
Dim buffer() As Byte = New Byte(1024) {}
Dim bytesRead As Integer
Dim Prozent As Double
Dim GesamtProzent As Double
' Fortschritt zunächst auf 0% setzen
Me.ProgressBar1.Value = 0
Try
' Datei-Download via HTTP "anfordern"
webreq = HttpWebRequest.Create(sURL)
webresp = webreq.GetResponse
' Download-Größe
Me.ProgressBar1.Maximum = webresp.ContentLength
' lokale Datei öffnen
stream = New FileStream(strFolder & "\" & strFile, FileMode.Create)
bReader = New BinaryReader(webresp.GetResponseStream)
bWriter = New BinaryWriter(stream)
' Datei blockweise downloaden und lokal speichern
Do
bytesRead = bReader.Read(buffer, 0, 1024)
wird zu:
Dim buffer() As Byte = New Byte(73232) {}
Dim bytesRead As Integer
Dim Prozent As Double
Dim GesamtProzent As Double
' Fortschritt zunächst auf 0% setzen
Me.ProgressBar1.Value = 0
Try
' Datei-Download via HTTP "anfordern"
webreq = HttpWebRequest.Create(sURL)
webresp = webreq.GetResponse
' Download-Größe
Me.ProgressBar1.Maximum = webresp.ContentLength
' lokale Datei öffnen
stream = New FileStream(strFolder & "\" & strFile, FileMode.Create)
bReader = New BinaryReader(webresp.GetResponseStream)
bWriter = New BinaryWriter(stream)
' Datei blockweise downloaden und lokal speichern
Do
bytesRead = bReader.Read(buffer, 0, 73232)
|
und schon zieht er wieder mit Voll-Last auf der Leitung  |
|
| |
|
 |
christopher.g Überflieger

Anmeldedatum: 03.05.2008 Beiträge: 565
|
Verfasst am: 25.03.2011, 10:39 |
|
|
ah
aja ich hab 4kb als buffer
wusste gar nicht dass man so groß gestalten kann
naja ist vl aus der vb6 zeit |
|
| |
|
 |
bluedead Newbie

Anmeldedatum: 25.03.2011 Beiträge: 3
|
Verfasst am: 25.03.2011, 14:17 |
|
|
ich habs auch einfach mal ausprobiert ^^ und hat geklappt und lädt nun mit vollen 2,8MBit
und da ich zum Großteil mit dem Patcher große Dateien runterlade, die ca. 100MB+ sind, ist es ja relativ ^^ |
|
| |
|
 |
|
|