Comparteix a través de


ThreadState Enumeración

Definición

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
ThreadState
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

Se aplica a

Consulte también