Attendere la chiusura di un thread

mercoledì 08 luglio 2009 - 12.11

artista Profilo | Newbie

Ciao a tutti,
ho un problema nella gestione della chiusura di un thread secondario.
All'apertura di un maschera istanzio un ogetto della mia classe 'SecondThread'.
Nel costruttore di questa classe ho queste istruzioni:

Public Sub New()
_Attivato = False
Avvia
End Sub

Private Sub Avvia()
Dim TempoDiAttesa As Long
Try
TempoDiAttesa = (Me.TempoDiCiclo * 1000) / 4
' Il thread è stato attivato
_Attivato = True
'.......
'eseguo un operazione che se è ok valorizzo la variabile Stato con 1
'.......
If Me.Stato > 0 Then
_Bloccato = False 'entro in loop
Else
_Bloccato = True 'NON entro in loop
End If
'
Do While Not _Bloccato
'
'attendo un secondo e mezzo
If Not _Bloccato Then
' Attende
Thread.Sleep(TempoDiAttesa)
End If

Else
MsgBox(MyLibNoDave.MessaggioComunicazione)
'esco
_Bloccato = True
End If

Loop
' Il thread è stato disattivato
_Attivato = False

Catch ex As Exception
Stato = 0
_Bloccato = True
_Attivato = False

Finally

End Try

End Sub
quindi mentre il flusso principale prosegue il thread esegue ciclicamente il controllo che devo fare.
Per la chiusura ho implementato il metodo Dispose,che ha questo codice:
Public Sub Dispose()
Disconnessione()
' Permette l'uscita dal loop di contrllo
_Bloccato = True
' sia effettivamente usciti dal loop
_Attivato = False
End Sub
nonostante abbia aggiunto dei controlli anche sull'evento FormClosing capita che nel taskManager sia ancora presente il processo.
Il mio dubbio è che il programma termini primi che il thread abbia il tempo nel ciclo While di testare la variabile _Bloccato , ma in questa come blocco la chiusura della maschera principale fin tanto che esco dal loop ?

Grazie!!

Dampyr Profilo | Junior Member

Ciao, per queste cose forse ti possono venire in aiuto i semafori, per bloccare e risvegliare i thread.
Io ho trovato questo:
http://blogs.ugidotnet.org/PietroLibroBlog/articles/91118.aspx
ma documentazione per la rete ne trovi a iosa.

Spero di esserti stato d'aiuto.

Buona giornata

... cerca di essere il giocatore di scacchi, non il pezzo sulla scacchiera...
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5