ThreadState Enumeración
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Especifica los estados de ejecución de Thread.
Esta enumeración admite una combinación bit a bit de sus valores de miembro.
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
- Herencia
- Atributos
Campos
Aborted | 256 | El estado del subproceso incluye AbortRequested y el subproceso está ahora inactivo, pero su estado no ha cambiado todavía a Stopped. |
AbortRequested | 128 | Se ha invocado al método Abort(Object) en el subproceso, pero el subproceso aún no ha recibido la excepción ThreadAbortException pendiente que intentará finalizarlo. |
Background | 4 | El subproceso está ejecutándose como subproceso en segundo plano, por oposición a un subproceso en primer plano. Para controlar este estado, hay que establecer la propiedad IsBackground. |
Running | 0 | El subproceso se ha iniciado y aún no se ha detenido. |
Stopped | 16 | El subproceso se ha detenido. |
StopRequested | 1 | Se ha solicitado que el subproceso se detenga. Esto último sólo se refiere al uso interno. |
Suspended | 64 | El subproceso se ha suspendido. |
SuspendRequested | 2 | Se ha solicitado que el subproceso se suspenda. |
Unstarted | 8 | No se ha invocado al método Start() en el subproceso. |
WaitSleepJoin | 32 | Subproceso bloqueado. Este podría ser el resultado de llamar a Sleep(Int32) o Join(), de solicitar un bloqueo (por ejemplo, llamando a Enter(Object) o Wait(Object, Int32, Boolean)) o de esperar en un objeto de sincronización de subprocesos como ManualResetEvent. |
Comentarios
La ThreadState
enumeración define un conjunto de todos los estados de ejecución posibles para los subprocesos. Solo es de interés en algunos escenarios de depuración. El código nunca debe usar el estado del subproceso para sincronizar las actividades de los subprocesos.
Una vez creado un subproceso, se encuentra al menos en uno de los estados hasta que finaliza. Los subprocesos creados en Common Language Runtime están inicialmente en estado Unstarted , mientras que los subprocesos externos o no administrados que entran en tiempo de ejecución ya están en estado Running . Un subproceso pasa del Unstarted estado al Running estado mediante una llamada a Thread.Start. Una vez que un subproceso abandona el estado Unstarted como resultado de una llamada a Start, nunca puede volver al estado Unstarted .
Un subproceso puede estar en más de un estado en un momento dado. Por ejemplo, si un subproceso está bloqueado en una llamada a Monitor.Waity otro subproceso llama Thread.Abort al subproceso bloqueado, el subproceso bloqueado estará en los WaitSleepJoin estados y AbortRequested al mismo tiempo. En este caso, tan pronto como el subproceso vuelva de la llamada a Monitor.Wait o se interrumpa, recibirá el objeto ThreadAbortException para comenzar a anularse. No todas las combinaciones de ThreadState
valores son válidas; por ejemplo, un subproceso no puede estar en los Aborted estados y Unstarted .
Un subproceso nunca puede abandonar el estado Stopped .
Importante
Hay dos enumeraciones de estado de subproceso: System.Threading.ThreadState y System.Diagnostics.ThreadState.
En la tabla siguiente se muestran las acciones que provocan un cambio de estado.
Acción | ThreadState |
---|---|
Se crea un subproceso en Common Language Runtime. | Unstarted |
Otro subproceso llama al Thread.Start método en el nuevo subproceso y la llamada devuelve. El Start método no devuelve hasta que se haya iniciado la ejecución del nuevo subproceso. No hay ninguna manera de saber en qué momento se iniciará la ejecución del nuevo subproceso durante la llamada a Start. |
Running |
El subproceso llama a Sleep | WaitSleepJoin |
El subproceso llama a Monitor.Wait en otro objeto. | WaitSleepJoin |
El subproceso llama a Join en otro subproceso. | WaitSleepJoin |
Otra llamada de subproceso Interrupt | Running |
Otra llamada de subproceso Suspend | SuspendRequested |
El subproceso responde a una solicitud Suspend. | Suspended |
Otra llamada de subproceso Resume | Running |
Otra llamada de subproceso Abort | AbortRequested |
El subproceso responde a una Abort solicitud. | Stopped |
Se termina un subproceso. | Stopped |
Además de los estados indicados anteriormente, también hay el Background estado , que indica si el subproceso se ejecuta en segundo plano o en primer plano. Para obtener más información, vea Subprocesos de primer y segundo plano.
La Thread.ThreadState propiedad de un subproceso proporciona el estado actual de un subproceso. Las aplicaciones deben usar una máscara de bits para determinar si se está ejecutando un subproceso. Dado que el valor de Running es cero (0), pruebe si un subproceso se ejecuta mediante el código siguiente:
(myThread.ThreadState & (ThreadState.Stopped | ThreadState.Unstarted)) == 0
(myThread.ThreadState And (ThreadState.Stopped Or ThreadState.Unstarted)) = 0