Especifica los estados de ejecución de
Thread.
La enumeración tiene un atributo
FlagsAttribute
que permite una combinación bit a bit de los valores de miembro.
Espacio de nombres: System.Threading
Ensamblado: mscorlib (en mscorlib.dll)
Visual Basic (Declaración)
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
<FlagsAttribute> _
Public Enumeration ThreadState
Dim instance As ThreadState
[SerializableAttribute]
[ComVisibleAttribute(true)]
[FlagsAttribute]
public enum ThreadState
[SerializableAttribute]
[ComVisibleAttribute(true)]
[FlagsAttribute]
public enum class ThreadState
/** @attribute SerializableAttribute() */
/** @attribute ComVisibleAttribute(true) */
/** @attribute FlagsAttribute() */
public enum ThreadState
SerializableAttribute
ComVisibleAttribute(true)
FlagsAttribute
public enum ThreadState
| | Nombre de miembro | Descripción |
|---|
| Aborted | El estado del subproceso incluye AbortRequested y el subproceso está ahora inactivo, pero su estado no ha cambiado todavía a Stopped. |
| AbortRequested | Se ha invocado al método Thread.Abort en el subproceso, pero el subproceso aún no ha recibido la excepción System.Threading.ThreadAbortException pendiente que intentará finalizarlo. |
| Background | 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 Thread.IsBackground. |
| Running | El subproceso se ha iniciado, no está bloqueado y no existe una excepción ThreadAbortException pendiente. |
| Stopped | El subproceso se ha detenido. |
| StopRequested | Se ha solicitado que el subproceso se detenga. Esto último sólo se refiere al uso interno. |
| Suspended | El subproceso se ha suspendido. |
| SuspendRequested | Se ha solicitado que el subproceso se suspenda. |
| Unstarted | No se ha invocado al método Thread.Start en el subproceso. |
| WaitSleepJoin | Subproceso bloqueado. Éste podría ser el resultado de llamar a Thread.Sleep o Thread.Join, de solicitar un bloqueo (por ejemplo, llamando a Monitor.Enter o Monitor.Wait) o de esperar en un objeto de sincronización de subprocesos como ManualResetEvent. |
ThreadState define un conjunto de todos los estados de ejecución posibles para los subprocesos. Una vez que se crea un subproceso, éste siempre se encuentra en al menos uno de los estados hasta que termina. Los subprocesos creados dentro de Common Language Runtime se encuentran inicialmente en estado Unstarted, mientras que los subprocesos externos que entran en el motor en tiempo de ejecución ya se encuentran en estado Running. Para que un subproceso Unstarted pase al estado Running, hay que llamar a Start. No todas las combinaciones de valores de ThreadState son válidas; por ejemplo, un subproceso no puede encontrarse en estado Aborted y estado Unstarted a la vez.
Importante: |
|---|
| Hay dos enumeraciones de estado de subprocesos, System.Threading.ThreadState y System.Diagnostics.ThreadState. Las enumeraciones del estado de los subprocesos sólo son de interés en algunos escenarios de depuración. El código nunca debe utilizar el estado de los subprocesos para sincronizar las actividades de los subprocesos. |
En la siguiente tabla se muestran las acciones que provocan un cambio de estado.
| Acción | ThreadState |
| Se crea un subproceso dentro de Common Language Runtime. | Unstarted |
| Un subproceso llama a Start | Unstarted |
| El subproceso comienza a ejecutarse. | Running |
| El subproceso llama a Sleep | WaitSleepJoin |
| El subproceso llama a Wait en otro objeto. | WaitSleepJoin |
| El subproceso llama a Join en otro subproceso. | WaitSleepJoin |
| Otro subproceso llama a Interrupt | Running |
| Otro subproceso llama a Suspend | SuspendRequested |
| El subproceso responde a una solicitud Suspend. | Suspended |
| Otro subproceso llama a Resume | Running |
| Otro subproceso llama a Abort | AbortRequested |
| El subproceso responde a una solicitud Abort. | Stopped |
| Finaliza un subproceso. | Stopped |
Además de los estados anteriormente mencionados, también existe el estado Background, que indica si el subproceso está ejecutándose en primer plano o en segundo plano.
En un momento dado, el subproceso puede encontrarse en más de un estado. Por ejemplo, si un subproceso se bloquea en una llamada a Wait, y otro subproceso llama a Abort en el subproceso bloqueado, el subproceso bloqueado se encontrará en estado WaitSleepJoin y en estado AbortRequested al mismo tiempo. En tal caso, en cuanto el subproceso se devuelva a partir de la llamada a Wait o en cuanto se interrumpa, recibirá la excepción ThreadAbortException para que comience su anulación.
La propiedad Thread.ThreadState de un subproceso proporciona el estado actual de un subproceso. Las aplicaciones deben utilizar una máscara de bits para determinar si se está ejecutando un subproceso. Como el valor de Running es cero (0), hay que comprobar si se está ejecutando un subproceso que utilice código de C# de tipo (myThread.ThreadState & (ThreadState.Stopped | ThreadState.Unstarted)) == 0 o código de Visual Basic de tipo (myThread.ThreadState And (ThreadState.Stopped Or ThreadState.Unstarted)) = 0.
Windows 98, Windows 2000 Service Pack 4, Windows Millennium, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter
Microsoft .NET Framework 3.0 es compatible con Windows Vista, Microsoft Windows XP SP2 y Windows Server 2003 SP1.
.NET Framework
Compatible con: 3.0, 2.0, 1.1, 1.0