Der BackgroundWorker ist ausgelastet und kann nicht mehrere Aufgaben gleichzeitig ausführen. Diese Fehlermeldung erscheint bei mir.
Code:
Woran liegt der Fehler. Schließlich lasse ich nach jedem Timer Intervall den BG-Worker neu starten.
Druckbare Version
Der BackgroundWorker ist ausgelastet und kann nicht mehrere Aufgaben gleichzeitig ausführen. Diese Fehlermeldung erscheint bei mir.
Code:
Woran liegt der Fehler. Schließlich lasse ich nach jedem Timer Intervall den BG-Worker neu starten.
Mach es anders.
also du startest den backgroundworker im form1 load event.
im backgroudworker mach ne while true (eine endlosschleife) rein und lässt nach jedem schleifen durchlauf mit sys.threading.thread.sleep(1000) sein programm eine bestimmte zeit warten.
@hackerking, nein abort ist bei einem thread objekt.Code:Private Sub bgWorker_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgWorker.DoWork
while true
Try
Dim httpRequest As HttpWebRequest = HttpWebRequest.Create(txtURL.Text)
Dim httpResponse As HttpWebResponse = httpRequest.GetResponse()
Dim reader As StreamReader = New StreamReader(httpResponse.GetResponseStream)
Dim httpContent As String = reader.ReadToEnd
txtContent.Text = httpContent
If txtContent.Text.Contains(txtString.Text) = True Then
notifyCheck.ShowBalloonTip(10000, "Anwendung", "Neues Ergebnis bei: " & txtURL.Text, ToolTipIcon.Info)
txtString.Clear()
End If
Catch ex As Exception
MsgBox("Es ist ein Fehler während der Verbindung zu: " & txtURL.Text & " aufgetreten." & vbCrLf & _
"Überprüfen Sie Ihre Internetverbindung.", MsgBoxStyle.Information, "Anwendung")
End Try
sys.threading.thread.sleep(1000)'eine sekunde warten
end while
End Sub
@hackerking Abort geht nicht (achso, Krusty hatte es schon geschrieben... ;) )
@Krusty: Danke, dass war nun das erste mal, dass ich einen Background Worker verwendet habe. Zuerst hatte ich den Webrequest per Timer immer wieder ausgeführt, allerdings hat das Programm dann einige Sekunden (nach dem Intervall) nicht mehr reagiert.
Edit:
Folgendes gemacht. Timer beide entfernt, BGW wird nun über einen Button gestartet:
Die BGW Klasse sieht nun folgendermaßen aus:Code:Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
bgWorker.RunWorkerAsync()
notifyCheck.ShowBalloonTip(1000, "anwendungsname", "Verbindung zu: " & txtURL.Text & " wird hergestellt.", ToolTipIcon.Info)
End Sub
Allerdings scheint die Routine fehlerhaft abzulaufen, denn die Exception wird nun nach jedem mal Starten (des BGW) mit etwas Zeitverzögerung angezeigt.Code:Private Sub bgWorker_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgWorker.DoWork
While True
Try
Dim httpRequest As HttpWebRequest = HttpWebRequest.Create(txtURL.Text)
Dim httpResponse As HttpWebResponse = httpRequest.GetResponse()
Dim reader As StreamReader = New StreamReader(httpResponse.GetResponseStream)
Dim httpContent As String = reader.ReadToEnd()
txtContent.Text = httpContent
If txtContent.Text.Contains(txtString.Text) = True Then
notifyCheck.ShowBalloonTip(10000, "c2x postchecker", "Neues Ergebnis bei: " & txtURL.Text, ToolTipIcon.Info)
txtString.Clear()
End If
Catch ex As Exception
MsgBox("Es ist ein Fehler während der Verbindung zu: " & txtURL.Text & " aufgetreten." & vbCrLf & _
"Überprüfen Sie Ihre Internetverbindung.", MsgBoxStyle.Information, "irgendein name")
End Try
Application.Exit()
Thread.Sleep(2000)
End While
End Sub
Anscheinend liegt es am Webrequest, wobei ich an sich keinen Fehler feststellen kann.