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 de 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
Aborted | 256 | L'état du thread inclut AbortRequested et le thread est à présent inactif ; toutefois, son état n'est pas encore passé à Stopped. |
AbortRequested | 128 | La méthode Abort(Object) a été appelée sur le thread, mais ce dernier n'a pas encore reçu ThreadAbortException en attente qui tentera de l'arrêter. |
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 définition de la propriété IsBackground. |
Running | 0 | Le thread a été démarré et n’est pas encore arrêté. |
Stopped | 16 | Le thread s'est arrêté. |
StopRequested | 1 | Une demande d'arrêt du thread est en cours. Ceci est exclusivement destiné à un usage interne. |
Suspended | 64 | Le thread a été suspendu. |
SuspendRequested | 2 | Une demande de suspension du thread est en cours. |
Unstarted | 8 | La méthode Start() n'a pas été appelée sur le thread. |
WaitSleepJoin | 32 | Le thread est bloqué. Cela peut résulter de l’appel de Sleep(Int32) ou Join(), d’une demande de verrouillage (par exemple l’appel de Enter(Object) ou Wait(Object, Int32, Boolean)) ou de l’attente d’un objet de synchronisation de threads tel que ManualResetEvent. |
Remarques
L’énumération ThreadState
définit un ensemble de tous les états d’exécution possibles pour les threads. Il ne s’intéresse qu’à 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 sur 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 revient de l’appel à Monitor.Wait l’appel ou est interrompu, il reçoit le ThreadAbortException début de l’abandon. Toutes les combinaisons de ThreadState
valeurs ne sont pas valides ; par exemple, un thread ne peut pas se trouver dans les états et Unstarted les Aborted deux.
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 |
Le thread appelle Sleep | WaitSleepJoin |
Le thread appelle Monitor.Wait sur un autre objet. | WaitSleepJoin |
Le thread appelle Join sur un autre thread. | WaitSleepJoin |
Un autre appel de thread Interrupt | Running |
Un autre appel de thread Suspend | SuspendRequested |
Le thread répond à une demande Suspend . | Suspended |
Un autre appel de thread Resume | Running |
Un autre appel de thread 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 est en cours d’exécution 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