TERMINARE UN THREAD

lunedì 30 luglio 2007 - 08.07

memmo77 Profilo | Expert

Salve, ho il seguente problema. Nella mia procedura ho inserito l'esecuzione di un thread per far partire contemporaneamente due sub:

Dim T As Thread
Try
Aggiorna_Stato()
T = New Thread(AddressOf Elaborazione)
T.Start()
Catch ex As Exception
Throw New Exception(ex.Message)
End Try

una per una elaborazione, l'altra per stabilire l'avanzamento di una barra di progresso. Nella procedura è previsto un pulsante di stop, al click di questo, lelaborazione si interromepe, tutto si ristabilisce, ma non riesco a fermare efrfettivamente il THREAD. Sapreste indicarmi come interromperlo senza avere troppi problemi? . Grazie a tutti

Ciciu Profilo | Senior Member

Ciao.
Dovrebbe esserTi sufficiente la chiamata a T.Abort()
Questa chiamata eleva l'eccezione ThreadAbortException, che puoi intercettare.

Ciao - FabioG

Fabio G

memmo77 Profilo | Expert

Ok, questa soluzione mi sembra ideale, solo una domanda, dove lo intercetto il thread per fare l'abort? Devo metterlo in una session e intercettarlo nell'evento stop? Li lo abortisco e gestisco l'eccezione?

Grazie mille ciao

Ciciu Profilo | Senior Member

A rigor di logica dovresTi intercettarlo nel thread principale, quello da cui parte il Tuo thread.
Immagino che il blocco try...catch che hai implementato possa già servire allo scopo. Aggiungi solo l'eccezione ThreadAbortException in una catch PRIMA di quella che hai già.
Ciao - FabioG
Fabio G

memmo77 Profilo | Expert

Ho provato a fare come dici te,

Dim T As Thread
Try
Aggiorna_Stato()
T = New Thread(AddressOf Elaborazione)
Session("T") = T
T.Start()
If Session("Modalità_Termine") = "Stop" Then
T.Abort()
End If
Catch e As ThreadAbortException
Throw New Exception(e.Message)
Catch ex As Exception
Throw New Exception(ex.Message)
End Try

Ma una volta partito lo start, non mi entra + in questa sub. Quindi non intercetta l'abort. Che dici la risolvo con una sesison?

Ciciu Profilo | Senior Member

Il metodo Abort dovrebbe schiantare il thread. Questo lo hai verificato ? Diciamo che se lanci la Tua applicazione, il metodo Abort dovrebbe schiantarTi, e dovrebbe aprirsi il debug alla riga che genera l'eccezione ThreadAbortException sull'istruzione che era in esecuzione al momento dell'Abort.

Probabilmente devi gestire questa eccezione DENTRO il thread.

Perdonami, ma è un argomento che sto approfondendo or ora.

Ciao - FabioG
Fabio G

memmo77 Profilo | Expert

Ok ho risolto, gestendo l'abort sulla prima eccezione generata, solo che allo start me lo sono messo in una session e allo stop l'ho passato di nuovo ad una variabile di tipo thred alla quale poi passo l'abort. Sembra comportarsi abbastanza bene. Grazie mille ciao
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