Para ver el artículo en inglés, active la casilla Inglés. También puede ver el texto en inglés en una ventana emergente si pasa el puntero del mouse por el texto.
Traducción
Inglés

Estados de subprocesos administrados

 

La propiedad Thread.ThreadState proporciona una máscara de bits que indica el estado del subproceso actual. 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.

System_CAPS_importantImportante

El estado de los subprocesos solo es de interés en algunos escenarios de depuración. El código nunca debe usar el estado de los subprocesos para sincronizar las actividades de los subprocesos.

Cuando se crea un subproceso administrado, este se encuentra en el estado Unstarted. El subproceso permanece en el estado Unstarted hasta que se cambia al estado iniciado por el sistema operativo. Llamar a Start permite que el sistema operativo sepa que se puede iniciar el subproceso; no cambia el estado del subproceso.

Los subprocesos no administrados que entran en el entorno administrado ya están en el estado iniciado. Una vez que un subproceso está en estado iniciado, varias acciones pueden provocar que los estados cambien. En la tabla siguiente se enumeran las acciones que provocan un cambio de estado, junto con el nuevo estado correspondiente.

Acción

Nuevo estado resultante

Se llama al constructor de la clase Thread.

Unstarted

Otro subproceso llama a Thread.Start.

Unstarted

El subproceso responde a Thread.Start y empieza a ejecutarse.

Running 

El subproceso llama a Thread.Sleep.

WaitSleepJoin 

El subproceso llama a Monitor.Wait en otro objeto.

WaitSleepJoin 

El subproceso llama a Thread.Join en otro subproceso.

WaitSleepJoin 

Otro subproceso llama a Thread.Suspend.

SuspendRequested 

El subproceso responde a una solicitud Thread.Suspend.

Suspended

Otro subproceso llama a Thread.Resume.

Running 

Otro subproceso llama a Thread.Abort.

AbortRequested

El subproceso responde a Thread.Abort.

Aborted y después Stopped

Dado que el estado Running tiene un valor de 0, no es posible realizar una prueba de bits para descubrirlo. En su lugar, se puede usar la siguiente prueba (en seudocódigo):

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

A menudo, los subprocesos están en más de un estado en un momento dado. 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. En ese caso, en cuanto el subproceso vuelva de la llamada a Wait o se interrumpa, recibirá una excepción ThreadAbortException.

Una vez que un subproceso abandona el estado Unstarted como resultado de una llamada a Start, nunca puede volver al estado Unstarted. Un subproceso nunca puede abandonar el estado Stopped.

Mostrar: