Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 861
  • Last Modified:

Restarting Backgroundworker Component with in work Compeleted Event VB.Net

hi,

I have some criteria.. I will start the backgrndwrkr component and it will return a result to me,If the result is Something (*Some String) then manipulation will be done automatically by events.. but if result is Nothing then it shud restart the Background worker component from starting.. to put it short i want to restart the background worker in its thread itself.. i searched whole interne but cud not find any thing useful.. my last hope is this place..
0
Yogesh_Agarwal
Asked:
Yogesh_Agarwal
  • 2
  • 2
1 Solution
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
The THREAD will know if it is going to return Nothing and need restarting....so instead of letting it complete and raise the RunWorkerCompleted() Event, make it restart itself internally with some kind of looping structure such as a While() loop.  You can notify the UI of the restart using the ProgressChanged() event...
0
 
Yogesh_AgarwalAuthor Commented:
i am really confused to how to use that loop.. i don know how to use loops for that.. i am really fed of searching it.. can u please tell me?
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
Ok...that was a pretty vague description so hopefully you can glean something from this convoluted example.  It keeps "working" until the result is retrieved in the second half of the current minute:
Public Class Form1
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Button1.Enabled = False
        BackgroundWorker1.RunWorkerAsync()
    End Sub
 
    Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        Static R As New Random
        Dim dt As DateTime
        Dim result As Integer
        Do
            System.Threading.Thread.Sleep(R.Next(2000, 7001)) ' do some "work" between 2 and 7 secs long
            dt = DateTime.Now
            result = dt.Second
            If result < 30 Then
                BackgroundWorker1.ReportProgress(-1, dt)
            End If
        Loop While result < 30
        e.Result = dt.TimeOfDay.TotalMilliseconds
    End Sub
 
    Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
        If e.ProgressPercentage = -1 Then
            Label1.Text = "Restarted @ " & e.UserState
        End If
    End Sub
 
    Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
        Label1.Text = "Completed: " & e.Result
        Button1.Enabled = True
    End Sub
 
End Class

Open in new window

0
 
Yogesh_AgarwalAuthor Commented:
nice work..
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now