Backgroundworker

Status
Niet open voor verdere reacties.

bonnowagt

Gebruiker
Lid geworden
7 dec 2006
Berichten
445
Hallo,

Ik heb een programma waarin op diverse manier door middel van zoeken gegevens kunnen worden gehaald. Op de achtergrond draait de backgroundworker zonder problemen.

Het probleem is als de gebruikert tijdens het zoeken op een ander zoekfunctie klikt of nog een keer op dezelfde functie ik de melding uiteraard krijg dat de backgroundworker bezig is. Vervolgens klikken op doorgaan en het programma gaat wel weer verder maar uiteraard wil ik deze melding van VB voorkomen.

Ik heb de code:
Code:
if backgroundworker1.isbusy=true then
msgbox( "Programma is bezet met een ander zoekopdracht")
exit sub
end if

Echter dit werkt niet. Of het programma krijgt alsnog de officiele melding of soms wel de message maar geraakt dan op hol en geraakt vast

Groetjes
 
Ik kan daar weinig aan toevoegen. Ik heb de functie wel eens in C# gebruikt (hoewel ik een "echte" thread handiger vind), maar daar had ik geen problemen met het uitlezen van "isbusy" (wel met callbackfuncties cross-scope, maar dat is een heel ander verhaal).
 
Oke,

Ik heb een module met threads (modeule threadsample) bedoel je dat? Moet ik die daar tussen voegen en zoja welke code is dat dan?

Dit is die module
Code:
Imports System.Threading

Public Module ThreadSample
    Public Balance As Integer = 1000
    Sub Main()
        Dim account As Account = New Account()
        Dim depositeBalance1 As DepositeBalance = New  _
        DepositeBalance(account, 1000, "Customer 1")
        Dim depositeBalance2 As DepositeBalance = New  _
        DepositeBalance(account, 1000, "Customer 2")
        Dim t1 As Thread = New  _
        Thread(AddressOf depositeBalance1.DepositeAmount)
        Dim t2 As Thread = New  _
        Thread(AddressOf depositeBalance2.DepositeAmount)
        t1.Start()
        t2.Start()
        Try
            t1.Join()
            t2.Join()
        Catch e As Exception
            Console.Write(e.ToString())
        Finally
            'Do Nothing
        End Try
    End Sub
    Public Class Account
        Private balanceAmount As Integer
        Public Sub Deposite(ByVal amount As Integer, _
        ByVal message As String)
            Console.Write(message & _
            " Depositing Amount " & amount)
            Console.Write(message & " Checking Previous Balance")
            Monitor.Enter(Me)
            balanceAmount = getBalance()
            Console.Write(message & _
            " Previous Balance in Account " & balanceAmount)
            balanceAmount += amount
            Console.Write(message & _
            " Updating Balance in Account ")
            setBalance(balanceAmount)
            Monitor.Exit(Me)
            Console.Write(message & " Update Balance " & Balance)


        End Sub
        Private Function getBalance() As Integer
            Try
                Thread.Sleep(1000)
            Catch e As Exception
                Console.Write(e.ToString())
            Finally
                'Do Nothing
            End Try
            Return Balance
        End Function


        Private Sub setBalance(ByVal amount As Integer)
            Try
                Thread.Sleep(1000)
            Catch e As Exception
                Console.Write(e.ToString())
            Finally
                'Do Nothing
            End Try
            Balance = amount
        End Sub
    End Class


    Public Class DepositeBalance
        Private account As Account
        Private amount As Integer
        Private message As String


        Public Sub New(ByRef account As Account, _
        ByVal amount As Integer, ByVal message As String)
            MyBase.New()
            Me.account = account
            Me.amount = amount
            Me.message = message
        End Sub
        Public Sub DepositeAmount()
            account.Deposite(amount, message)
        End Sub
    End Class
End Module
 
Laatst bewerkt door een moderator:
Een backgroundworker is een "wrapper" om thread. Je moet verschillende dingen opgeven. Onder andere of de backgroundworker gecancelled mag worden, callbackfuncties en dergelijke. Als "isbusy" niet het goede antwoord geeft, zou ik eerst bij de instellingen van je backgroundworker kijken en dat even testen.

Dit hierboven is inderdaad meer "klasieke" threading, maar ik zie niet wat dat met de originele vraag te maken heeft, tenzij je threads aanroept vanuit backgroundworker.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan