Hallo zusammen,
ich benutze aktuell zum ersten mal den Backgroundworker. Dieser soll eine Listview zeile für zeile durchgehen und pro Zeile ein WebRequest durchführen. Nach jeder Zeile möchte ich ein reportprogress aufrufen. Hier mal der Code der NICHT funktioniert:
Dieser Code funktioniert dagegen:
Beim ersten Code erhalte ich nur die "Fertig" Messagebox wenn der Bgw completed ist. Beim zweiten Code erhalte ich für jede Zeile meiner Listview eine Messagebox und dann die bgw completed Messagebox. Der Unterschied besteht ja nur im fehlenden WebRequest.
Ich stehe mal wieder auf dem Schlauch und hoffe mich kann jemand auf meinen Fehler hinweisen.
Gruß Kay
ich benutze aktuell zum ersten mal den Backgroundworker. Dieser soll eine Listview zeile für zeile durchgehen und pro Zeile ein WebRequest durchführen. Nach jeder Zeile möchte ich ein reportprogress aufrufen. Hier mal der Code der NICHT funktioniert:
VB.NET-Quellcode
- 'Backgroundworker arbeitet
- Sub BgwDoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs)
- 'Listview Item für Item durchgehen
- For x = 0 To lv.Items.Count - 1
- 'Deklaration Web Request
- Dim oh_request As HttpWebRequest
- Dim oh_response As HttpWebResponse = Nothing
- Dim oh_reader As StreamReader
- Dim server_string As String = "http://" & server_name & ":" & server_port & "/item/" & lv.Items(x).Text
- 'Response auf Request empfangen
- oh_request = DirectCast(WebRequest.Create(server_string), HttpWebRequest)
- oh_response = DirectCast(oh_request.GetResponse(), HttpWebResponse)
- oh_reader = New StreamReader(oh_response.GetResponseStream())
- oh_request.timeout = 5000
- 'Response in String schreiben
- Dim raw_oh_response As String
- raw_oh_response = oh_reader.ReadToEnd()
- bgw.ReportProgress(x)
- Threading.Thread.Sleep(1000)
- Next
- End Sub
- 'Backgroundworker Prozess geändert
- Sub BgwProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs)
- Dim wert As Integer = e.ProgressPercentage
- messagebox.Show(wert.ToString)
- End Sub
- 'Backgroundworker ist fertig
- Sub BgwRunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs)
- MessageBox.Show("Fertig")
- End Sub
Dieser Code funktioniert dagegen:
VB.NET-Quellcode
- 'Backgroundworker arbeitet
- Sub BgwDoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs)
- 'Listview Item für Item durchgehen
- For x = 0 To lv.Items.Count - 1
- bgw.ReportProgress(x)
- Threading.Thread.Sleep(1000)
- Next
- End Sub
- 'Backgroundworker Prozess geändert
- Sub BgwProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs)
- Dim wert As Integer = e.ProgressPercentage
- messagebox.Show(wert.ToString)
- End Sub
- 'Backgroundworker ist fertig
- Sub BgwRunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs)
- MessageBox.Show("Fertig")
- End Sub
Beim ersten Code erhalte ich nur die "Fertig" Messagebox wenn der Bgw completed ist. Beim zweiten Code erhalte ich für jede Zeile meiner Listview eine Messagebox und dann die bgw completed Messagebox. Der Unterschied besteht ja nur im fehlenden WebRequest.
Ich stehe mal wieder auf dem Schlauch und hoffe mich kann jemand auf meinen Fehler hinweisen.
Gruß Kay