ThreadState Énumération
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Spécifie les états d’exécution d’un Thread.
Cette énumération prend en charge une combinaison au niveau du bit de ses valeurs membres.
public enum class ThreadState
[System.Flags]
public enum ThreadState
[System.Flags]
[System.Runtime.InteropServices.ComVisible(true)]
public enum ThreadState
[System.Flags]
[System.Serializable]
public enum ThreadState
[System.Flags]
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public enum ThreadState
[<System.Flags>]
type ThreadState =
[<System.Flags>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ThreadState =
[<System.Flags>]
[<System.Serializable>]
type ThreadState =
[<System.Flags>]
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Serializable>]
type ThreadState =
Public Enum ThreadState
- Héritage
- Attributs
Champs
| Nom | Valeur | Description |
|---|---|---|
| Running | 0 | Le thread a été démarré et n’a pas encore été arrêté. |
| StopRequested | 1 | Le thread est demandé à arrêter. Il s’agit uniquement d’une utilisation interne. |
| SuspendRequested | 2 | Le thread est demandé à suspendre. |
| Background | 4 | Le thread est exécuté en tant que thread d’arrière-plan, par opposition à un thread de premier plan. Cet état est contrôlé par la définition de la IsBackground propriété. |
| Unstarted | 8 | La Start() méthode n’a pas été appelée sur le thread. |
| Stopped | 16 | Le thread s’est arrêté. |
| WaitSleepJoin | 32 | Le thread est bloqué. Cela peut être le résultat de l’appel Sleep(Int32) ou Join()de la demande d’un verrou , par exemple, en appelant Enter(Object) ou Wait(Object, Int32, Boolean) - ou d’attendre sur un objet de synchronisation de threads tel que ManualResetEvent. |
| Suspended | 64 | Le thread a été suspendu. |
| AbortRequested | 128 | La Abort(Object) méthode a été appelée sur le thread, mais le thread n’a pas encore reçu l’attente ThreadAbortException qui tentera de l’arrêter. |
| Aborted | 256 | L’état du thread inclut AbortRequested et le thread est maintenant mort, mais son état n’a pas encore changé en Stopped. |
Remarques
L’énumération ThreadState définit un ensemble de tous les états d’exécution possibles pour les threads. Il n’est intéressant que dans quelques scénarios de débogage. Votre code ne doit jamais utiliser l’état du thread pour synchroniser les activités des threads.
Une fois qu’un thread est créé, il se trouve dans au moins un des états jusqu’à ce qu’il se termine. Les threads créés dans le Common Language Runtime sont initialement dans l’état Unstarted , tandis que les threads externes ou non managés qui entrent dans le runtime sont déjà dans l’état Running . Un thread est passé de l’état Unstarted à l’état Running en appelant Thread.Start. Une fois qu’un thread quitte l’état Unstarted à la suite d’un appel Start, il ne peut jamais revenir à l’état Unstarted .
Un thread peut être dans plusieurs états à un moment donné. Par exemple, si un thread est bloqué sur un appel à Monitor.Wait, et qu’un autre thread appelle Thread.Abort le thread bloqué, le thread bloqué se trouve à la fois dans les états et AbortRequested les WaitSleepJoin états en même temps. Dans ce cas, dès que le thread retourne de l’appel à l’appel ou Monitor.Wait est interrompu, il reçoit l’abandon ThreadAbortException . Toutes les combinaisons de ThreadState valeurs ne sont pas valides ; par exemple, un thread ne peut pas être dans les états et Unstarted les Aborted états.
Un thread ne peut jamais quitter l’état Stopped .
Important
Il existe deux énumérations d’état de thread : System.Threading.ThreadState et System.Diagnostics.ThreadState.
Le tableau suivant montre les actions qui provoquent un changement d’état.
| Action | ThreadState |
|---|---|
| Un thread est créé dans le Common Language Runtime. | Unstarted |
| Un autre thread appelle la Thread.Start méthode sur le nouveau thread et l’appel retourne. La Start méthode ne retourne pas tant que le nouveau thread n’a pas commencé à s’exécuter. Il n’existe aucun moyen de savoir à quel moment le nouveau thread commence à s’exécuter, pendant l’appel à Start. |
Running |
| Appels de threads Sleep | WaitSleepJoin |
| Le thread appelle Monitor.Wait un autre objet. | WaitSleepJoin |
| Le thread appelle Join sur un autre thread. | WaitSleepJoin |
| Autres appels de threads Interrupt | Running |
| Autres appels de threads Suspend | SuspendRequested |
| Le thread répond à une Suspend demande. | Suspended |
| Autres appels de threads Resume | Running |
| Autres appels de threads Abort | AbortRequested |
| Le thread répond à une Abort demande. | Stopped |
| Un thread est arrêté. | Stopped |
Outre les états indiqués ci-dessus, il existe également l’état Background , qui indique si le thread s’exécute en arrière-plan ou au premier plan. Pour plus d’informations, consultez Threads de premier plan et d’arrière-plan.
La Thread.ThreadState propriété d’un thread fournit l’état actuel d’un thread. Les applications doivent utiliser un masque de bits pour déterminer si un thread est en cours d’exécution. Étant donné que la valeur de Running zéro (0), testez si un thread est en cours d’exécution par le code suivant :
(myThread.ThreadState & (ThreadState.Stopped | ThreadState.Unstarted)) == 0
(myThread.ThreadState And (ThreadState.Stopped Or ThreadState.Unstarted)) = 0