System.Threading.ThreadState

Penso che chiunque abbia usato i Thread in un'applicazione si sia trovato prima o poi a testare la proprietà ThreadState. System.Threading.ThreadState é un'enumerazione di tipo Flag, infatti un Thread può trovarsi in più di uno stato contemporaneamente.
Ad esempio un thread potrebbe essere in join (WaitSleepJoin) su un altro thread e contemporaneamente sospeso (Suspended) o SuspendedRequest, StopRequest, ecc. ecc.
Il  più naturale modo per testare lo stato di un Thread quindi sarebbe (secondo me):
(myThread.ThreadState And ThreadState.StatoDesiderato) = ThreadState.StatoDesiderato
Giusto, ma non vi venga mai in mente di testare in questo modo se é Running:
(myThread.ThreadState And ThreadState.Running) = ThreadState.Running
perché questa riga di codice restituirà sempre True!
Perché?! Semplice: ThreadState.Running corrisponde al valore 0 dell'enumerazione ('tacci loro!).

Lo so che é una banalità, che lo sapevate già tutti, ma io ho perso UN'ORA oggi per rendermene conto!

Print | posted on venerdì 16 dicembre 2005 16:59

Comments have been closed on this topic.