Comunque per rilevare se un metodo filettato ha completato
-
09-09-2019 - |
Domanda
Ho una coda, che è fondamentalmente la coda di produttore / consumatore nel albahari.com filettatura libro, che prende un elemento di coda dalla coda, che è un blocco di esecuzione un'azione dalla coda e poi chiama un metodo per eseguire l'ActionList all'interno dell'elemento di coda.
posso uccidere la coda abbastanza facilmente Enqueing un actionblock nullo e bloccare il thread principale facendo un giro / aspetto con un Thread.sleep () fino a quando il conteggio di coda va a zero, e tutti i fili cadere attraverso il tempo! = ciclo nullo, completando così, ma il metodo di esecuzione dell'ultima ActionList può essere ancora eseguendo l'ultimo filo.
La domanda è, è la loro comunque di rilevare se quel metodo ha ancora un thread in esecuzione di esso, come forse utilizzando un semaforo o un contatore con un interblocco per contare il semaforo fino all'inizio del metodo e contare giù alla fine. Quindi, se si raggiunge lo zero, li conosco la sua non filettato.
Questa è la attuazione di un metodo destroy sull'interfaccia, di chiuderlo prima di chiamare smaltire.
Soluzione
Se si avvia un thread come questo:
System.Threading.Thread mythread = new System.Threading.Thread();
mythread.Start();
È possibile controllare:
mythread.IsAlive()
in qualsiasi momento per determinarne lo stato.
Altri suggerimenti
Utilizza il BackgroundWorker che ha un evento completato
Utilizzare un attributo PostSharp sul metodo.