bevriezen tijdens bijv. laden of zoeken

Status
Niet open voor verdere reacties.

bonnowagt

Gebruiker
Lid geworden
7 dec 2006
Berichten
445
Ik heb in mijn programma een listbox waarin bijvoorbeeld alle files worden ingeladen op de volgende wijze:
Code:
 With FolderBrowserDialog1
            .RootFolder = Environment.SpecialFolder.Desktop
            .SelectedPath = "c:\"
            .Description = "Select the source directory"
            If .ShowDialog = DialogResult.OK Then
                TextBoxDir.Text = (.SelectedPath)
            Else : Exit Sub
            End If
        End With
        Dim list As List(Of String) = Bestanden(TextBoxDir.Text)

        For Each item In list
            ListBox1.Items.Add(item)
        Next

Dit gaat prima maar gezien het aantal files op de C:\ schijf soms zon 200000 files duurt dit nogal even. Ook bij het zoeken naar een bepaalde file duurt dit een tijdje wat op zich geen probleem is. Het probleem is dat indien ik dubbelklik op het formulier of een ander programma opstart dat het programma stokt en de melding dat het programma niet reageert. De form wordt dan ook wit enz.

Om dit te voorkomen heb ik bijv. me.enabled=false geprobeerd maar dit werkt niet. Hoe kan ik dit voorkomen en op welke wijze.

Groetjes
 
Met multithreading, zoek maar eens op Google. Als het niet lukt: vraag maar raak. ;)
 
Ik heb het volgende gevonden anar veel zoeken, het zegt mij verder heel weinig maar dit is de code:
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

Is dit de code die ik moet gebruiken en hoe integreer ik dit in bijv bovenstaande. Of is het niet het juiste
 
Het principe is inderdaad juist. Een iets uitgekleder voorbeeld:

[cpp]Private Sub Button1_Click() Handles Button1.Click
Dim t As New Threading.Thread(AddressOf Werk)
t.Start()

End Sub

Private Sub Werk()
''//Rekenwerk o.i.d.
End Sub[/cpp]
 
Hoi,

Het werkt inmiddels perfect, hartelijk dank voor de aanwijzingen

Groetjes
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan