backgroundworker herstarten

Status
Niet open voor verdere reacties.

bn2vs

Terugkerende gebruiker
Lid geworden
18 aug 2007
Berichten
1.705
Hey,

Ik heb een background worker die opnieuw moet worden gestart als die klaar is met een taak. Wat ik niet kan doen is mijnBackgroundworker.runworkerasync, in de mijnBackgroundworker_RunWorkerCompleted sub, omdat die dan nog bezig is en niet nog eens gestart kan worden.

Heeft iemand hier een efficiente oplossing voor? (momenteel start ik een timer, in die sub, en herstart ik mn backgroundworker bij de eerste tick, maar dat is een redelijk slechte oplossing :()
 
try catch rond de restart in de mijnBackgroundworker_RunWorkerCompleted sub.
Indien nog bezig heeft hij een error, anders doet hij restart.

Dit is uit de losse pols, moest het dus niet werken, post je maar nog eens. Dan zoek
ik een betere oplossing!
 
Het probleem is dat hij bezig is todat de laatste opdarcht in die sub is uitgevoerd, dus erin checken of die nog bezig is zal altijd true opleveren :(
 
Raise dan gewoon een event in die laatste sub na alle code en
zorg dat die event de backgroundworker herstart!
 
Als ik dat doe word die event via de background worker therad uitgevoerd, en moet ik gaan ligge invoke om aan mn worker zelf te kunnen.

Btw, je blijft nog steeds met het originele probleem zitten als ik me niet vergis. Die sub word toch pas afgesloten als alle events en hun handlers zijn uitgevoerd?
 
RaiseEvent doet enkel een call, dus wordt de code in die event uitgevoerd buiten de methode om. Je moet maar eens regel per regel kijken met de debugger.

Indien het niet zo werkt, laat me zeker iets weten, dan leer ik ook iets bij!
 
Bij klik op herstart word m_shouldRestart false en stopt de bgw, en word die eerste sub uitgevoerd.

Code:
        Private Sub bgwAttacker_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) _
        Handles m_bgwAttacker.RunWorkerCompleted
            CPnlAttack.Stop()
            m_clock.Stop()
            'If m_shouldRestart Then m_restarter.Start()
            m_statsUpdater.Stop()
            RaiseEvent Completed(Me, New EventArgs())
        End Sub

        Private Sub testz() Handles Me.Completed
            If m_shouldRestart Then
                m_shouldRestart = False
                CPnlAttack.Start() ' START OOK DE BGW!
            End If
        End Sub

Dat is dus wat jij zij, maar het werkt niet. Ik krijg de foutmelding dat de bgw nog bezig is.
Betekend dus dat eerst alle event handlers worden uitgevoerd, en dan pas de sub word afgesloten...

Neem aan dat een timer dus de enige oplossing is?
 
Nee die raise event moet in de doWork methode van de
bgworker komen te staan.

Err, denk even na, dan werkt het ZEKER niet...
Heb het ook ff uitgeprobeert voor alle zekerheid.

Ik zal het dan maar op mn timer houden, spijtig dat er geen vindbare betere oplossing is :(

Toch bedankt voor de help iedereen :D
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan