Question BackGroundWorker Question(s)

inkedgfx

Well-known member
Joined
Sep 29, 2012
Messages
139
Location
USA
Programming Experience
Beginner
I added a backgroundworker to my lottery number generator program..everything is working fine but the backgroundworker keeps working even if all the games are picked....

for example:

the user has the option to choose from 1 to 6 games to generate...each game generates 6 unique numbers...once the worker picks the numbers the labels display the numbers for each game...this works fine , once all the labels are filled with the numbers the worker continues to pick numbers and changes the labels with different numbers.....below is the code I have for the worker.....

 Private Sub BackgroundWorker1_DoWork(sender As Object, e As ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        Dim HowMany As Integer
        frmNumbers.Show()
        HowMany = Me.NumericUpDown1.Value
        frmNumbers.Label1.Visible = False
        frmNumbers.Label2.Visible = False
        frmNumbers.Label3.Visible = False
        frmNumbers.Label4.Visible = False
        frmNumbers.Label5.Visible = False
        frmNumbers.Label6.Visible = False

        If HowMany = "1" Then
            frmNumbers.Label1.Visible = True
            frmNumbers.Label11.Text = HowMany & " Game Generated!"
            frmNumbers.Text = HowMany & " Game Generated!"
            RandomUnique(frmNumbers.Label1)
 
            frmNumbers.Label1.Text = frmNumbers.Label1.Text.Substring(0, frmNumbers.Label1.Text.Length - 2)

        End If
        If HowMany = "2" Then
            frmNumbers.Label1.Visible = True
            frmNumbers.Label2.Visible = True
            frmNumbers.Label11.Text = HowMany & " Games Generated!"
            frmNumbers.Text = HowMany & " Games Generated!"
            RandomUnique(frmNumbers.Label1)
            frmNumbers.Label1.Text = frmNumbers.Label1.Text.Substring(0, frmNumbers.Label1.Text.Length - 2)

            ' RandomUniqueTwo(Label2)
            ' Label2.Text = Label2.Text.Substring(0, Label2.Text.Length - 2)
            Do Until frmNumbers.Label2.Text < frmNumbers.Label1.Text
                RandomUniqueTwo(frmNumbers.Label2)
                frmNumbers.Label2.Text = frmNumbers.Label2.Text.Substring(0, frmNumbers.Label2.Text.Length - 2)
            Loop
        End If
        If HowMany = "3" Then
            frmNumbers.Label1.Visible = True
            frmNumbers.Label2.Visible = True
            frmNumbers.Label3.Visible = True
            frmNumbers.Label11.Text = HowMany & " Games Generated"
            frmNumbers.Text = HowMany & " Games Generated!"
            RandomUnique(frmNumbers.Label1)
            frmNumbers.Label1.Text = frmNumbers.Label1.Text.Substring(0, frmNumbers.Label1.Text.Length - 2)
            Do Until frmNumbers.Label2.Text < frmNumbers.Label1.Text
                RandomUniqueTwo(frmNumbers.Label2)
                frmNumbers.Label2.Text = frmNumbers.Label2.Text.Substring(0, frmNumbers.Label2.Text.Length - 2)
            Loop
            Do Until frmNumbers.Label3.Text < frmNumbers.Label2.Text
                RandomUnique(frmNumbers.Label3)
                frmNumbers.Label3.Text = frmNumbers.Label3.Text.Substring(0, frmNumbers.Label3.Text.Length - 2)
            Loop
            Application.DoEvents()
        End If

        If HowMany = "4" Then
            frmNumbers.Label1.Visible = True
            frmNumbers.Label2.Visible = True
            frmNumbers.Label3.Visible = True
            frmNumbers.Label4.Visible = True
            frmNumbers.Label11.Text = HowMany & " Games Generated"
            frmNumbers.Text = HowMany & " Games Generated!"
            RandomUnique(frmNumbers.Label1)
            frmNumbers.Label1.Text = frmNumbers.Label1.Text.Substring(0, frmNumbers.Label1.Text.Length - 2)
            Do Until frmNumbers.Label2.Text < frmNumbers.Label1.Text
                RandomUniqueTwo(frmNumbers.Label2)
                frmNumbers.Label2.Text = frmNumbers.Label2.Text.Substring(0, frmNumbers.Label2.Text.Length - 2)
            Loop
            Do Until frmNumbers.Label3.Text < frmNumbers.Label2.Text
                RandomUnique(frmNumbers.Label3)
                frmNumbers.Label3.Text = frmNumbers.Label3.Text.Substring(0, frmNumbers.Label3.Text.Length - 2)
            Loop
            Do Until frmNumbers.Label4.Text < frmNumbers.Label3.Text
                RandomUnique(frmNumbers.Label4)
                frmNumbers.Label4.Text = frmNumbers.Label4.Text.Substring(0, frmNumbers.Label4.Text.Length - 2)
            Loop
            Application.DoEvents()
        End If
        If HowMany = "5" Then
            frmNumbers.Label1.Visible = True
            frmNumbers.Label2.Visible = True
            frmNumbers.Label3.Visible = True
            frmNumbers.Label4.Visible = True
            frmNumbers.Label5.Visible = True
            frmNumbers.Label11.Text = HowMany & " Games Generated"
            frmNumbers.Text = HowMany & " Games Generated!"
            RandomUnique(frmNumbers.Label1)
            frmNumbers.Label1.Text = frmNumbers.Label1.Text.Substring(0, frmNumbers.Label1.Text.Length - 2)
            Do Until frmNumbers.Label2.Text < frmNumbers.Label1.Text
                RandomUniqueTwo(frmNumbers.Label2)
                frmNumbers.Label2.Text = frmNumbers.Label2.Text.Substring(0, frmNumbers.Label2.Text.Length - 2)
            Loop
            Do Until frmNumbers.Label3.Text < frmNumbers.Label2.Text
                RandomUnique(frmNumbers.Label3)
                frmNumbers.Label3.Text = frmNumbers.Label3.Text.Substring(0, frmNumbers.Label3.Text.Length - 2)
            Loop
            Do Until frmNumbers.Label4.Text < frmNumbers.Label3.Text
                RandomUnique(frmNumbers.Label4)
                frmNumbers.Label4.Text = frmNumbers.Label4.Text.Substring(0, frmNumbers.Label4.Text.Length - 2)
            Loop
            Do Until frmNumbers.Label5.Text < frmNumbers.Label4.Text
                RandomUnique(frmNumbers.Label5)
                frmNumbers.Label5.Text = frmNumbers.Label5.Text.Substring(0, frmNumbers.Label5.Text.Length - 2)
            Loop
            Application.DoEvents()
        End If
        For i As Integer = 1 To HowMany - 1
            If HowMany = "6" Then
                frmNumbers.Label1.Visible = True
                frmNumbers.Label2.Visible = True
                frmNumbers.Label3.Visible = True
                frmNumbers.Label4.Visible = True
                frmNumbers.Label5.Visible = True
                frmNumbers.Label6.Visible = True
                frmNumbers.Label11.Text = HowMany & " Games Generated"
                frmNumbers.Text = HowMany & " Games Generated!"
                RandomUnique(frmNumbers.Label1)
                frmNumbers.Label1.Text = frmNumbers.Label1.Text.Substring(0, frmNumbers.Label1.Text.Length - 2)
                Do Until frmNumbers.Label2.Text < frmNumbers.Label1.Text
                    RandomUniqueTwo(frmNumbers.Label2)
                    frmNumbers.Label2.Text = frmNumbers.Label2.Text.Substring(0, frmNumbers.Label2.Text.Length - 2)
                Loop
                Application.DoEvents()
                Do Until frmNumbers.Label3.Text < frmNumbers.Label2.Text
                    RandomUnique(frmNumbers.Label3)
                    frmNumbers.Label3.Text = frmNumbers.Label3.Text.Substring(0, frmNumbers.Label3.Text.Length - 2)
                Loop
                Application.DoEvents()
                Do Until frmNumbers.Label4.Text < frmNumbers.Label3.Text
                    RandomUnique(frmNumbers.Label4)
                    frmNumbers.Label4.Text = frmNumbers.Label4.Text.Substring(0, frmNumbers.Label4.Text.Length - 2)
                Loop
                Application.DoEvents()
                Do Until frmNumbers.Label5.Text < frmNumbers.Label4.Text
                    RandomUnique(frmNumbers.Label5)
                    frmNumbers.Label5.Text = frmNumbers.Label5.Text.Substring(0, frmNumbers.Label5.Text.Length - 2)
                Loop
                Application.DoEvents()
                Do Until frmNumbers.Label6.Text < frmNumbers.Label5.Text
                    RandomUnique(frmNumbers.Label6)
                    frmNumbers.Label6.Text = frmNumbers.Label6.Text.Substring(0, frmNumbers.Label6.Text.Length - 2)
                Loop
                Application.DoEvents()
                BackgroundWorker1.ReportProgress(i)
            End If
        Next
    End Sub
    Private Sub BackgroundWorker1_ProgressChanged(sender As Object, e As ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
        frmNumbers.ProgressBar1.Value = e.ProgressPercentage
        frmNumbers.lblPercentDone.Text = frmNumbers.lblPercentDone.Text & " %"
    End Sub
    Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
        Dim HowMany As Integer
        HowMany = Me.NumericUpDown1.Value
        frmNumbers.ProgressBar1.Value = 0
        frmNumbers.lblgenerating.Text = HowMany & " Games Generated"
    End Sub


what I want the worker to do is stop when all the games are picked.the last bit of the backgroundworker_dowork I added a for loop to calculate the progress..which doesnt work either.

any help would be appreciated

Thank You
InkedGFX
 
My example was just an example. You have hard-coded 10 in that first loop so you are always going to generate 10 sets of numbers. If you want the number of sets to vary then you need to use a variable for the upper limit of the For loop. You need to use the same upper limit for the second loop.

Your second loop is wrong too because you're displaying each set of numbers in the same Label, overwriting the previous set each time. If you want to display all the numbers in one Label then you need to combine all the numbers into a single String and display that String.
 
ok...so can I get rid of the second loop and just set the label's text with the first for loop?

for example:

for i = 1 to form1.NumericUpandDown1.value
gameNumbers.add(GetrandomSelection(allNumbers, 6))
label1.text = i
next

edit: I dont think this will work either.. this over write the label each time the loop passes.....so how to fill as many labels as the NumericUpandDown value within the for loop?
InkedGFX
 
Back
Top