Salve a tutti, tanto per cambiare, ho ancora una domanda sui threads.
Per terminare un thread in esecuzione normalmente uso un tag condiviso con l’ applicazione principale che se impostato a true indica al processo di terminare.
Quando ad esempio il programma viene chiuso usando la X della finestra, il thread non fa a tempo ad eseguire la chiusura.
Nel metodo destructor della classe ho provato ad inserire il comando Mythread.kill ma il comando non viene espletato.
Come posso eliminare i threads in esecuzione prima che l’ applicazione si chiuda anche in modo imprevisto ?
Grazie Antonio per l’ ottima guida sui thread che hai appena pubblicato.
Nei prossimi giorni metter in pratica i tuoi consigli.
Aggiornamento:
Dopo innumerevoli tentativi ho trovato una soluzione.
Non sar molto"pulita", ma funziona.
Nell’ evento Cancel Closing inserisco:
MyThread1.kill
app.DoEvents(10)
MyThread2.kill
app.DoEvents(10)
MyThread3.kill
app.DoEvents(10)
Senza inserire “app.DoEvents” la finestra si blocca e non vengono chiusi tutti i threads.
Potresti anche provare qualcosa tipo:
while true
if myThread1.state<>Thread.notRunning then
myThread1.kill
continue
end if
....
if myThread3.state<>Thread.notRunning then
myThread3.kill
continue
end if
wend