Backgroundworker gebruiken om subroutine aan te roepen

Status
Niet open voor verdere reacties.

thijsvn

Gebruiker
Lid geworden
6 mrt 2009
Berichten
25
Hallo Allen,

de volgende code gebruik ik momenteel in een Backgroundworker:

Code:
    Private Sub bw_Populate_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bw_Populate.DoWork
        SetResolution()
        Populate()
        Populate_AScroll()
        Populate_DScroll()
    End Sub

de subroutines die hier aangeroepen worden staan allemaal in een module 'SubsNFuntions.vb'. Verder zijn alle populate subs variaties van de Populate() subroutine ingesteld op andere tabbladen van de mainform.
Het probleem waar ik nu tegenaan loop is dat alleen het werk van populate() zichtbaar is en dat van de andere 2 niet (tabladen 2 en 3 worden niet voorzien van de nodige labels).

EDIT: De backgroundworker roept geen enkele sub aan. bleek dat de Populate() sub vanaf een andere locatie 'per ongeluk' werd aangeroepen.

Hopelijk kan iemand mij hierbij helpen.

alvast bedankt,

Thijs
 
Laatst bewerkt:
bedankt voor je reactie rasco, dat artikel heeft inderdaad wat geholpen. Ik ben nu van mening dat het een invoke probleem is. de subroutines Populate() en consorten plaatsen alle drie een aantal labels op de form.. hier is de code van populate():

Code:
 Public Sub Populate()
        Dim CMD As New OleDbCommand
        Dim name As String = ""
        Dim amount As Integer
        Dim CN As New OleDbConnection(frm_Spellbook.ConnStr)
        Dim Reader As OleDbDataReader


        frm_Spellbook.X = 0
        frm_Spellbook.Y = -frm_Spellbook.Yincrease
        frm_Spellbook.SpellPager = 1
        frm_Spellbook.NewPage = True

        frm_Spellbook.tc_SpellIndex.Controls.Clear()


        For frm_Spellbook.SpellHandledLvL = 0 To 9
            AddSpell(frm_Spellbook.SpellHandledLvL, 0)
            CMD.Connection = CN
            CMD.CommandText = "SELECT name, Studied FROM PaizoSpells WHERE wiz = '" & frm_Spellbook.SpellHandledLvL & "' AND Known = '1'"

            Try
                CN.Open()

                Reader = CMD.ExecuteReader
                While Reader.Read

                    name = replazor(Convert.ToString(Reader.Item("name")))
                    amount = Reader.Item("Studied")
                    AddSpell(name, amount)

                End While
            Catch ex As Exception
                MsgBox("Failed to retrieve spells from database due to the following error!" _
                            & vbCrLf & ex.Message)
            End Try

            CN.Close()

            frm_Spellbook.NewLine = True

        Next

        Populate_AScroll()
        Populate_DScroll()

    End Sub

    Public Sub AddSpell(ByRef SpellName As String, ByRef Studied As Integer)
        With frm_Spellbook
            ReDim .lbl_Spell(.SpellCounter)
            .lbl_Spell(.SpellCounter) = New Label

            Dim studielabel As String = "     "

            If Studied > 0 Then
                studielabel = Convert.ToString(Studied) & " - "
            End If

            Dim s As String = "Segoe UI"
            Dim SpellFont As New Font(s, .Fontsize, FontStyle.Regular)
            Dim HeaderFont As New Font(s, .Fontsize, FontStyle.Bold)


            If .Y <= .Yend Then
                .Y += .Yincrease
            Else
                .Y = .Yincrease
                If .X <= .Xend Then
                    .X += 250
                Else
                    .X = 0
                    .SpellPager += 1
                    .NewPage = True
                End If
            End If


            If .NewLine Then
                If (.Y + (.Fontsize * 2)) <= .Yend Then
                    .Y += (.Fontsize * 2)
                Else
                    .Y = .Yincrease
                    If .X <= .Xend Then
                        .X += 250
                    Else
                        .X = 0
                        .SpellPager += 1
                        .NewPage = True
                    End If
                End If
                With .lbl_Spell(.SpellCounter)
                    .Location = New Point(frm_Spellbook.X + frm_Spellbook.Header, frm_Spellbook.Y)
                    .Text = frm_Spellbook.SpellHandledLvL & "-Lvl Spells: (" & getNrSpells(My.Settings.WizardLevel, frm_Spellbook.SpellHandledLvL, My.Settings.IntMod) & " /day)"
                    .Name = .Text
                    .AutoSize = True
                    .BackColor = Color.Transparent
                    .ForeColor = Color.Black
                    .Font = HeaderFont
                End With
                .NewLine = False
            Else
                With .lbl_Spell(.SpellCounter)
                    .Location = New Point(frm_Spellbook.X, frm_Spellbook.Y)
                    .Text = studielabel & SpellName
                    .Name = SpellName
                    .AutoSize = True
                    .BackColor = Color.Transparent
                    .ForeColor = Color.Black
                    .Font = SpellFont
                    .ContextMenuStrip = frm_Spellbook.SpellContextMenu
                End With

                AddHandler .lbl_Spell(.SpellCounter).MouseDown, AddressOf SetSender
                AddHandler .lbl_Spell(.SpellCounter).DoubleClick, AddressOf spelldiscr
            End If

            If .NewPage Then
                ReDim .tp_SpellPage(.SpellPager)
                .tp_SpellPage(.SpellPager) = New TabPage
                .tp_SpellPage(.SpellPager).Name = "tp_Spellpage" & .SpellPager
                .tp_SpellPage(.SpellPager).Text = "Page " & .SpellPager
                .tc_SpellIndex.Controls.Add(.tp_SpellPage(.SpellPager))
                .NewPage = False
            End If

            .tp_SpellPage(.SpellPager).Controls.Add(.lbl_Spell(.SpellCounter))


            frm_Spellbook.NewLine = False

        End With

Het probleem is alleen dat ik het hele invoke verhaal en crossthreading niet helemaal lijk te begrijpen. kan iemand mij misschien nog een duwtje in de goede richting geven?

alvast bedankt,

Thijs
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan