Thread

Status
Niet open voor verdere reacties.

bonnowagt

Gebruiker
Lid geworden
7 dec 2006
Berichten
445
Halllo,

Als ik bijvoorbeeld alle gegevens uit mijn harde schijf wil halen is het programma die ik heb nogal even bezig. Ik heb daarom een Thread gemaakt als volgt.
Code:
Dim VoorbeeldThread As New System.Threading.Thread(AddressOf Voorbeeld)

Vervolgens dus de sub aangemaakt als volgt:


Code:
Sub Voorbeeld

Try
            Dim sfd As New SaveFileDialog With { _
                 .AddExtension = True, _
                 .Filter = "MP3 Lists (*.muziekbw)|*.bws", _
                 .FilterIndex = 0, _
              .RestoreDirectory = True, _
                 .InitialDirectory = My.Application.Info.DirectoryPath}
            If sfd.ShowDialog = Windows.Forms.DialogResult.OK Then
                IO.File.Wr
End sub   enz enz.

en ik sluit de sub met:
Code:
If (voorbeeldthread.ThreadState.ToString = "SuspendedRequested, WaitSleepJoin") Or
(voorbeeldthread.ThreadState.ToString = "Suspended") Or (voorbeeldthread.ThreadState.ToString =
"WaitSleepJoin, Suspended") Then
        Else
            opslaanthread.Abort



Nu werkt het prima maar als ik de lijst wis die ik gekregen heb en wil weer opnieuw een thread aanroepen dan lukt dit niet. Krijg de melding dat
de thread niet beeindigd is en niet twee keer kan worden aangeroepen.

Wie kan mij helpen
 
Laatst bewerkt door een moderator:
Hoi,

Voordat je de thread start moet je hem 'vernieuwen'. Je moet daar dus de thread opnieuw aanmaken:
[CPP]VoorbeeldThread = New System.Threading.Thread(AddressOf Voorbeeld)[/CPP]

MartinJM

[edit]
Volgens mij hoef je een thread trouwens niet af te sluiten als die automatisch ergens ophoudt (aan het eind van de sub komt). Dat is anders als je er een infinite loop mee creëert. Dan moet je hem wel 'handmatig' afsluiten.
[/edit]
 
Laatst bewerkt:
Heb het onderstaande gedeelte van het programma. Als ik toch een paar keer flink op het formulier klik of een andere programma opstart wordt het programma gestoord en reageert niet meer:

Code:
  Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        openThread = New System.Threading.Thread(AddressOf open)
        open()
    End Sub
    Sub open()
        Try
            Label9.Text = ""
            Dim frmd As DirectoryDialog = New DirectoryDialog()
            frmd.BrowseFor = DirectoryDialog.BrowseForTypes.FilesAndDirectories
            frmd.Title = "Kies een bestand of een map" & vbCrLf & "B. Wagt copyright@2013"
            If frmd.ShowDialog(Me) = DialogResult.OK Then
                Label9.Text = frmd.Selected
            Else
                Exit Sub
            End If
        Catch ex As Exception
        End Try
        Cursor = Cursors.AppStarting
        Refresh()
        Try
            If Label9.Text.EndsWith(".mp3") Or Label9.Text.EndsWith(".wav3") Or _
                 Label9.Text.EndsWith(".mp4") Or Label9.Text.EndsWith(".flac") Or _
                 Label9.Text.EndsWith(".avi") Or Label9.Text.EndsWith(".mkv") Or _
                 Label9.Text.EndsWith(".mpeg") Or Label9.Text.EndsWith(".png") Or _
                 Label9.Text.EndsWith(".jpg") Or Label9.Text.EndsWith(".bmp") Or _
                 Label9.Text.EndsWith(".vob") Or Label9.Text.EndsWith(".png") Or _
                 Label9.Text.EndsWith(".gif") Or Label9.Text.EndsWith(".wmv") Or _
                 Label9.Text.EndsWith(".ico") Then
                ListBox1.Items.Add(Label9.Text)
                ListBox2.Items.Add((Path.GetFileNameWithoutExtension(Label9.Text)))
            End If
        Catch ex As Exception
        End Try
        Try
            Dim fileNames = My.Computer.FileSystem.GetFiles(Label9.Text, FileIO.SearchOption.SearchAllSubDirectories)
            For Each fileName As String In fileNames
                If fileName.EndsWith(".mp3") Or fileName.EndsWith(".wav3") Or _
                               fileName.EndsWith(".mp4") Or fileName.EndsWith(".flac") Or _
                              fileName.EndsWith(".avi") Or fileName.EndsWith(".mkv") Or _
                                fileName.EndsWith(".mpeg") Or fileName.EndsWith(".png") Or _
                                fileName.EndsWith(".jpg") Or fileName.EndsWith(".bmp") Or _
                                fileName.EndsWith(".vob") Or fileName.EndsWith(".png") Or _
                                fileName.EndsWith(".gif") Or fileName.EndsWith(".wmv") Or _
                                fileName.EndsWith(".ico") Then
                    ListBox1.Items.Add(fileName)
                    ListBox2.Items.Add((Path.GetFileNameWithoutExtension(fileName)))

                End If
            Next
        Catch ex As Exception
        End Try
        Try
            Cursor = Cursors.Default
            Timer1.Start()
            ListBox2.SelectedIndex = 0
            ListBox1.SelectedIndex = ListBox2.SelectedIndex
        Catch ex As Exception
        End Try
        Me.Text = Label1.Text
        Label1.Text = ListBox2.SelectedItem & "  " _
                & ListBox1.SelectedIndex + 1 & "/" & ListBox1.Items.Count & " "
        Timer1.Start()
       

        openThread = New System.Threading.Thread(AddressOf open)
    End Sub
 
Hoi,

Je moet niet de sub aanroepen, maar de thread laten starten:
[CPP]//''vervang "open()" onder "openThread = New System.Threading.Thread(AddressOf open)" door:
openThread.start()[/CPP]
(even uit de losse pols).

En de laatste lijn in de sub "open" kan dan ook weg. Dan nog 1 tip en een opmerking:
Het is het beste als je ook nog even checkt of de thread al aan staat voor je hem nog eens start (bij het klikken op de button), anders kan hij ongelimiteerd veel gestart worden.

En je moet nog even hiernaar kijken voor het volgende probleem waar je tegenaan gaat lopen: http://msdn.microsoft.com/en-us/library/ms171728.aspx (tenzij je "CheckForIllegalCrossThreadCalls = False" in het form.load event hebt staan, wat ik je afraad. Gebruik dan de invoke methode - zie link).

Succes! :thumb:
MartinJM
 
Inderdaad Martin stom van mij, het moest inderdaad opentrhread zijn in mijn geval ging ie niet werken de thread eigenlijk erg stom van me, maar goed het werkt nu prima waarvoor hartelijk dank.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan