Bloccare un Thread che dura troppo

giovedì 22 marzo 2012 - 23.45
Tag Elenco Tags  VB.NET  |  .NET 4.0

luka82 Profilo | Junior Member

Dovrei poter bloccare un Thread nel caso in cui questo duri più di Tot minuti. Creo un Thread con
Dim t As New System.Threading.Thread(Sub() AvviaProcesso)
t.IsBackground = True
t.Start()

come procedo?

b4p3p Profilo | Newbie

Ciao,

se non hai modo di eseguire dei controlli al suo interno, credo tu lo possa bloccare con un secondo thread di controllo.

freeteo Profilo | Guru

Ciao,
l'unico modo è tenere il riferimento a quel thread, magari lo metti su una List<T> oppure un Dictionary<...,T> in modo da potere poi avere il riferimento da codice, ed andare a chiamare "Abort()" oppure "Kill()" di questo.

Per sapere invece da quanto tempo è in esecuzione, ti devi settare una variabile con il valore della data corrente (appunto la data di inizio) appena prima di lanciarlo con lo Start(), e quindi su un timer o su un tuo altro thread, vedere quanto tempo è passato.
Magari come ti dicevo prima, usando una Dictionary<T,DateTime> puoi tenerti già l'informazione a portata di mano, e quindi andare a ciclare su tutta la collection per vedere quali sono in esecuzione (proprietà IsAlive se non ricordo male) da troppo tempo e killarli.
Io provederei a fare qualcosa del genere...

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

luka82 Profilo | Junior Member

Avevo provveduto a fare una cosa del genere ma nel Thread può capitare di dover fare una copia di un file molto grande(cosa che faccio con il classico File.Copy), di conseguenza se pure faccio dall'esterno(nel Timer) Thread1.Abort la copia non viene interrotta.

freeteo Profilo | Guru

Ciao,
File.Copy non so cosa faccia esattamente a livello di chiamate di sistema, ma capisco il tuo problema, è un'operazione che non riesci ad interrompere.
Puoi però fare a meno di usare quella funzione "out of the box" e farti la copia dei byte del file usando uno Stream per la lettura ed uno per la scrittura.
Ad esempio come fatto qui: http://stackoverflow.com/questions/6044629/file-copy-with-progress-bar

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

luka82 Profilo | Junior Member

Grazie, seguirò questa strada...

freeteo Profilo | Guru

>Grazie, seguirò questa strada...
di nulla, quando/se riesci magari posta 2 parole su come hai fatto se ti ricordi.

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5