Estados de subprocesos administradosManaged Thread States

La propiedad Thread.ThreadState proporciona una máscara de bits que indica el estado del subproceso actual.The property Thread.ThreadState provides a bit mask that indicates the thread's current state. Un subproceso está siempre en al menos uno de los estados posibles en la enumeración ThreadState y puede estar en varios estados al mismo tiempo.A thread is always in at least one of the possible states in the ThreadState enumeration, and can be in multiple states at the same time.

Importante

El estado de los subprocesos solo es de interés en algunos escenarios de depuración.Thread state is only of interest in a few debugging scenarios. El código nunca debe usar el estado de los subprocesos para sincronizar las actividades de los subprocesos.Your code should never use thread state to synchronize the activities of threads.

Cuando se crea un subproceso administrado, este se encuentra en el estado Unstarted .When you create a managed thread, it is in the Unstarted state. El subproceso permanece en el estado Unstarted hasta que se cambia al estado iniciado por el sistema operativo.The thread remains in the Unstarted state until it is moved into the started state by the operating system. Llamar a Start permite que el sistema operativo sepa que se puede iniciar el subproceso; no cambia el estado del subproceso.Calling Start lets the operating system know that the thread can be started; it does not change the state of the thread.

Los subprocesos no administrados que entran en el entorno administrado ya están en el estado iniciado.Unmanaged threads that enter the managed environment are already in the started state. Una vez que un subproceso está en estado iniciado, varias acciones pueden provocar que los estados cambien.Once a thread is in the started state, a number of actions can cause it to change states. En la tabla siguiente se enumeran las acciones que provocan un cambio de estado, junto con el nuevo estado correspondiente.The following table lists the actions that cause a change of state, along with the corresponding new state.

AcciónAction Nuevo estado resultanteResulting new state
Se llama al constructor de la clase Thread .The constructor for the Thread class is called. Unstarted
Otro subproceso llama a Thread.Start.Another thread calls Thread.Start. Unstarted
El subproceso responde a Thread.Start y empieza a ejecutarse.The thread responds to Thread.Start and starts running. Running
El subproceso llama a Thread.Sleep.The thread calls Thread.Sleep. WaitSleepJoin
El subproceso llama a Monitor.Wait en otro objeto.The thread calls Monitor.Wait on another object. WaitSleepJoin
El subproceso llama a Thread.Join en otro subproceso.The thread calls Thread.Join on another thread. WaitSleepJoin
Otro subproceso llama a Thread.Suspend.Another thread calls Thread.Suspend. SuspendRequested
El subproceso responde a una solicitud Thread.Suspend.The thread responds to a Thread.Suspend request. Suspended
Otro subproceso llama a Thread.Resume.Another thread calls Thread.Resume. Running
Otro subproceso llama a Thread.Abort.Another thread calls Thread.Abort. AbortRequested
El subproceso responde a Thread.Abort.The thread responds to an Thread.Abort. Abortedy después StoppedAborted, then Stopped

Dado que el estado Running tiene un valor de 0, no es posible realizar una prueba de bits para descubrirlo.Because the Running state has a value of 0, it is not possible to perform a bit test to discover this state. En su lugar, se puede usar la siguiente prueba (en seudocódigo):Instead, the following test (in pseudo-code) can be used:

if ((state & (Unstarted | Stopped)) == 0)   // implies Running     

A menudo, los subprocesos están en más de un estado en un momento dado.Threads are often in more than one state at any given time. Por ejemplo, si un subproceso se bloquea en una llamada de Monitor.Wait y otro subproceso llama a Abort en el mismo subproceso, el subproceso estará en ambos estados WaitSleepJoin y AbortRequested al mismo tiempo.For example, if a thread is blocked on a Monitor.Wait call and another thread calls Abort on that same thread, the thread will be in both the WaitSleepJoin and the AbortRequested states at the same time. En ese caso, en cuanto el subproceso vuelva de la llamada a Wait o se interrumpa, recibirá una excepción ThreadAbortException.In that case, as soon as the thread returns from the call to Wait or is interrupted, it will receive the ThreadAbortException.

Una vez que un subproceso abandona el estado Unstarted como resultado de una llamada a Start, nunca puede volver al estado Unstarted .Once a thread leaves the Unstarted state as the result of a call to Start, it can never return to the Unstarted state. Un subproceso nunca puede abandonar el estado Stopped .A thread can never leave the Stopped state.

Vea tambiénSee Also

ThreadAbortException
Thread
ThreadState
SubprocesamientoThreading