Ergebnis 1 bis 4 von 4
  1. #1
    db
    Registriert seit
    07.06.2009
    Beiträge
    585

    Standard BackgroundWorker Fehler

    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.


  2. #2
    Capt'n Crunch Avatar von hackerking
    Registriert seit
    08.11.2008
    Beiträge
    964

    Standard

    Zitat Zitat von c2x Beitrag anzeigen
    Schließlich lasse ich nach jedem Timer Intervall den BG-Worker neu starten.
    Völlig falsch.
    Du müsstest jedes mal einen neuen BG Worker deklarieren, da der andere ja immer noch arbeitet. .NET stoppt den Thread nicht, auch nicht, wenn du den Thread neu startest, oder mit CancelAsynch unterbrichts.

    PS: Es müsste .Abort und nicht CancelAsynch heißen oder?

  3. #3
    CIH-Virus Avatar von krusty
    Registriert seit
    12.10.2008
    Beiträge
    445

    Standard

    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.

    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, nein abort ist bei einem thread objekt.

  4. #4
    db
    Registriert seit
    07.06.2009
    Beiträge
    585

    Standard

    @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:
    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
    Die BGW Klasse sieht nun folgendermaßen aus:
    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
    Allerdings scheint die Routine fehlerhaft abzulaufen, denn die Exception wird nun nach jedem mal Starten (des BGW) mit etwas Zeitverzögerung angezeigt.

    Anscheinend liegt es am Webrequest, wobei ich an sich keinen Fehler feststellen kann.
    Geändert von c2x (05.05.2010 um 17:08 Uhr) Grund: Automerged Doublepost


Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •