Este artículo se tradujo de forma manual. Mueva el puntero sobre las frases del artículo para ver el texto original. |
Traducción
Original
|
Thread (Clase)
Crea y controla un subproceso, establece su prioridad y obtiene su estado.
Ensamblado: mscorlib (en mscorlib.dll)
El tipo Thread expone los siguientes miembros.
| Nombre | Descripción | |
|---|---|---|
|
Thread(ParameterizedThreadStart) | Inicializa una nueva instancia de la clase Thread, especificando un delegado que permite pasar un objeto al subproceso cuando éste último se inicia. |
|
Thread(ThreadStart) | Inicializa una nueva instancia de la clase Thread. |
|
Thread(ParameterizedThreadStart, Int32) | Inicializa una nueva instancia de la clase Thread, especificando un delegado que permite pasar un objeto al subproceso cuando éste último se inicia y especificando el tamaño de pila máximo para el subproceso. |
|
Thread(ThreadStart, Int32) | Inicializa una nueva instancia de la clase Thread, especificando el tamaño de pila máximo para el subproceso. |
| Nombre | Descripción | |
|---|---|---|
|
ApartmentState | Obsoleto. Obtiene o establece el estado de apartamento de este subproceso. |
|
CurrentContext | Obtiene el contexto actual donde se está ejecutando el subproceso. |
|
CurrentCulture | Obtiene o establece la referencia cultural del subproceso actual. |
|
CurrentPrincipal | Obtiene o establece el principal del subproceso actual (de la seguridad basada en funciones). |
|
CurrentThread | Obtiene el subproceso actualmente en ejecución. |
|
CurrentUICulture | Obtiene o establece la referencia cultural actual utilizada por el administrador de recursos para buscar recursos específicos de la referencia cultural en tiempo de ejecución. |
|
ExecutionContext | Obtiene un objeto ExecutionContext que contiene información sobre los distintos contextos del subproceso actual. |
|
IsAlive | Obtiene un valor que indica el estado de ejecución del subproceso actual. |
|
IsBackground | Obtiene o establece un valor que indica si un subproceso es o no un subproceso en segundo plano. |
|
IsThreadPoolThread | Obtiene un valor que indica si un subproceso pertenece al grupo de subprocesos administrados o no. |
|
ManagedThreadId | Obtiene un identificador único para el actual subproceso administrado. |
|
Name | Obtiene o establece el nombre del subproceso. |
|
Priority | Obtiene o establece un valor que indica la prioridad de programación de un subproceso. |
|
ThreadState | Obtiene un valor que contiene los estados del subproceso actual. |
| Nombre | Descripción | |
|---|---|---|
|
Abort() | Produce una excepción ThreadAbortException en el subproceso en el que se invoca, para iniciar el proceso de finalización del subproceso. Normalmente, una llamada a este método finaliza el subproceso. |
|
Abort(Object) | Produce una excepción ThreadAbortException en el subproceso en el que se invoca, para iniciar el proceso de finalización del subproceso, proporcionando al mismo tiempo información sobre excepciones relativa a la terminación del subproceso. Normalmente, una llamada a este método finaliza el subproceso. |
|
AllocateDataSlot | Asigna una ranura de datos sin nombre en todos los subprocesos. Para mejorar el rendimiento, en su lugar use campos marcados con el atributo ThreadStaticAttribute. |
|
AllocateNamedDataSlot | Asigna una ranura de datos con nombre en todos los subprocesos. Para mejorar el rendimiento, en su lugar use campos marcados con el atributo ThreadStaticAttribute. |
|
BeginCriticalRegion | Notifica a un host que la ejecución está a punto de entrar en una región del código donde los efectos de una anulación del subproceso o de una excepción no controlada podrían constituir un riesgo para otras tareas del dominio de aplicaciones. |
|
BeginThreadAffinity | Notifica a un host que el código administrado está a punto de ejecutar instrucciones que dependen de la identidad del subproceso del sistema operativo físico actual. |
|
DisableComObjectEagerCleanup | Desactiva la limpieza automática de contenedores RCW (Runtime Callable Wrappers) para el subproceso actual. |
|
EndCriticalRegion | Notifica a un host que la ejecución está a punto de entrar en una región de código donde los efectos de una anulación del subproceso o de una excepción no controlada se limitan a la tarea actual. |
|
EndThreadAffinity | Notifica a un host que el código administrado ha terminado de ejecutar instrucciones que dependen de la identidad del subproceso del sistema operativo físico actual. |
|
Equals(Object) | Determina si el objeto Object especificado es igual al objeto Object actual. (Se hereda de Object). |
|
Finalize |
Libera todos los recursos utilizados por la clase CriticalFinalizerObject.
(Se hereda de CriticalFinalizerObject). En XNA Framework 3.0, este miembro se hereda de Object.Finalize(). En , este miembro se hereda de Object.Finalize(). |
|
FreeNamedDataSlot | Elimina la asociación entre un nombre y una ranura, en todos los subprocesos del proceso. Para mejorar el rendimiento, en su lugar use campos marcados con el atributo ThreadStaticAttribute. |
|
GetApartmentState | Devuelve un valor ApartmentState que indica el estado de tipo apartamento. |
|
GetCompressedStack | Obsoleto. Devuelve un objeto CompressedStack que se puede utilizar para capturar la pila correspondiente al subproceso actual. |
|
GetData | Recupera el valor de la posición especificada en el subproceso actual, dentro del dominio actual del subproceso actual. Para mejorar el rendimiento, en su lugar use campos marcados con el atributo ThreadStaticAttribute. |
|
GetDomain | Devuelve el dominio actual en el que se está ejecutando el subproceso actual. |
|
GetDomainID | Devuelve un identificador único del dominio de la aplicación. |
|
GetHashCode |
Devuelve un código hash para el subproceso actual.
(Invalida a Object.GetHashCode()). En XNA Framework 3.0, este miembro se hereda de Object.GetHashCode(). En , este miembro se hereda de Object.GetHashCode(). |
|
GetNamedDataSlot | Busca una ranura de datos con nombre. Para mejorar el rendimiento, en su lugar use campos marcados con el atributo ThreadStaticAttribute. |
|
GetType | Obtiene el objeto Type de la instancia actual. (Se hereda de Object). |
|
Interrupt | Anula un subproceso que se encuentra en estado de subproceso WaitSleepJoin. |
|
Join() | Bloquea el subproceso de la llamada hasta que un subproceso finaliza, pero continúa realizando suministro de SendMessage y COM estándar. |
|
Join(Int32) | Bloquea el subproceso de llamada hasta que finaliza un subproceso o transcurre el tiempo especificado, pero continúa realizando el suministro de SendMessage y COM estándar. |
|
Join(TimeSpan) | Bloquea el subproceso de llamada hasta que finaliza un subproceso o transcurre el tiempo especificado, pero continúa realizando el suministro de SendMessage y COM estándar. |
|
MemberwiseClone | Crea una copia superficial del objeto Object actual. (Se hereda de Object). |
|
MemoryBarrier | Sincroniza el acceso a la memoria de la siguiente forma: el procesador que ejecuta el subproceso actual no puede reordenar instrucciones de forma que los accesos a la memoria anteriores a la llamada a MemoryBarrier se ejecuten después de los accesos a memoria que siguen a la llamada a MemoryBarrier. |
|
ResetAbort | Anula un método Abort solicitado para el subproceso actual. |
|
Resume | Obsoleto. Reanuda el subproceso que ha sido suspendido. |
|
SetApartmentState | Establece el estado de tipo apartamento de un subproceso antes de iniciarse. |
|
SetCompressedStack | Obsoleto. Aplica un objeto CompressedStack capturado al subproceso actual. |
|
SetData | Establece los datos de la ranura especificada en el subproceso actualmente en ejecución, para el dominio actual de dicho subproceso. Para obtener un mejor rendimiento, utilice en su lugar los campos marcados con el atributo ThreadStaticAttribute. |
|
SetProcessorAffinity | En .NET Compact Framework para Xbox 360, establece la afinidad del procesador para un subproceso administrado. La afinidad del procesador determina los procesadores en los que se ejecuta el subproceso. |
|
Sleep(Int32) | Suspende el subproceso actual durante un período de tiempo especificado. |
|
Sleep(TimeSpan) | Bloquea el subproceso actual durante un período de tiempo especificado. |
|
SpinWait | Hace que un subproceso espere durante el período de tiempo definido por el parámetro iterations. |
|
Start() | Hace que el sistema operativo cambie el estado de la instancia actual a ThreadState.Running. |
|
Start(Object) | Hace que el sistema operativo cambie el estado de la instancia actual a ThreadState.Running y, opcionalmente, proporciona un objeto que contiene datos para su uso por el método que el subproceso ejecuta. |
|
Suspend | Obsoleto. Suspende el subproceso y, si éste ya se ha suspendido, no tiene efecto alguno. |
|
ToString | Devuelve una cadena que representa el objeto actual. (Se hereda de Object). |
|
TrySetApartmentState | Establece el estado de tipo apartamento de un subproceso antes de iniciarse. |
|
VolatileRead(Byte) | Lee el valor de un campo. El valor es el último que haya escrito cualquier procesador de un equipo, independientemente del número de procesadores y del estado de la caché del procesador. |
|
VolatileRead(Double) | Lee el valor de un campo. El valor es el último que haya escrito cualquier procesador de un equipo, independientemente del número de procesadores y del estado de la caché del procesador. |
|
VolatileRead(Int16) | Lee el valor de un campo. El valor es el último que haya escrito cualquier procesador de un equipo, independientemente del número de procesadores y del estado de la caché del procesador. |
|
VolatileRead(Int32) | Lee el valor de un campo. El valor es el último que haya escrito cualquier procesador de un equipo, independientemente del número de procesadores y del estado de la caché del procesador. |
|
VolatileRead(Int64) | Lee el valor de un campo. El valor es el último que haya escrito cualquier procesador de un equipo, independientemente del número de procesadores y del estado de la caché del procesador. |
|
VolatileRead(IntPtr) | Lee el valor de un campo. El valor es el último que haya escrito cualquier procesador de un equipo, independientemente del número de procesadores y del estado de la caché del procesador. |
|
VolatileRead(Object) | Lee el valor de un campo. El valor es el último que haya escrito cualquier procesador de un equipo, independientemente del número de procesadores y del estado de la caché del procesador. |
|
VolatileRead(SByte) | Lee el valor de un campo. El valor es el último que haya escrito cualquier procesador de un equipo, independientemente del número de procesadores y del estado de la caché del procesador. |
|
VolatileRead(Single) | Lee el valor de un campo. El valor es el último que haya escrito cualquier procesador de un equipo, independientemente del número de procesadores y del estado de la caché del procesador. |
|
VolatileRead(UInt16) | Lee el valor de un campo. El valor es el último que haya escrito cualquier procesador de un equipo, independientemente del número de procesadores y del estado de la caché del procesador. |
|
VolatileRead(UInt32) | Lee el valor de un campo. El valor es el último que haya escrito cualquier procesador de un equipo, independientemente del número de procesadores y del estado de la caché del procesador. |
|
VolatileRead(UInt64) | Lee el valor de un campo. El valor es el último que haya escrito cualquier procesador de un equipo, independientemente del número de procesadores y del estado de la caché del procesador. |
|
VolatileRead(UIntPtr) | Lee el valor de un campo. El valor es el último que haya escrito cualquier procesador de un equipo, independientemente del número de procesadores y del estado de la caché del procesador. |
|
VolatileWrite(Byte, Byte) | Escribe inmediatamente un valor en un campo, de manera que el valor sea visible para todos los procesadores del equipo. |
|
VolatileWrite(Double, Double) | Escribe inmediatamente un valor en un campo, de manera que el valor sea visible para todos los procesadores del equipo. |
|
VolatileWrite(Int16, Int16) | Escribe inmediatamente un valor en un campo, de manera que el valor sea visible para todos los procesadores del equipo. |
|
VolatileWrite(Int32, Int32) | Escribe inmediatamente un valor en un campo, de manera que el valor sea visible para todos los procesadores del equipo. |
|
VolatileWrite(Int64, Int64) | Escribe inmediatamente un valor en un campo, de manera que el valor sea visible para todos los procesadores del equipo. |
|
VolatileWrite(IntPtr, IntPtr) | Escribe inmediatamente un valor en un campo, de manera que el valor sea visible para todos los procesadores del equipo. |
|
VolatileWrite(Object, Object) | Escribe inmediatamente un valor en un campo, de manera que el valor sea visible para todos los procesadores del equipo. |
|
VolatileWrite(SByte, SByte) | Escribe inmediatamente un valor en un campo, de manera que el valor sea visible para todos los procesadores del equipo. |
|
VolatileWrite(Single, Single) | Escribe inmediatamente un valor en un campo, de manera que el valor sea visible para todos los procesadores del equipo. |
|
VolatileWrite(UInt16, UInt16) | Escribe inmediatamente un valor en un campo, de manera que el valor sea visible para todos los procesadores del equipo. |
|
VolatileWrite(UInt32, UInt32) | Escribe inmediatamente un valor en un campo, de manera que el valor sea visible para todos los procesadores del equipo. |
|
VolatileWrite(UInt64, UInt64) | Escribe inmediatamente un valor en un campo, de manera que el valor sea visible para todos los procesadores del equipo. |
|
VolatileWrite(UIntPtr, UIntPtr) | Escribe inmediatamente un valor en un campo, de manera que el valor sea visible para todos los procesadores del equipo. |
|
Yield | Hace que el subproceso que realiza la llamada proporcione la ejecución a otro subproceso que está listo para ejecutarse en el procesador actual. El sistema operativo selecciona el subproceso al que se va a proporcionar la ejecución. |
| Nombre | Descripción | |
|---|---|---|
|
_Thread.GetIDsOfNames | Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío. |
|
_Thread.GetTypeInfo | Recupera la información de tipo de un objeto, que se puede utilizar después para obtener la información de tipo de una interfaz. |
|
_Thread.GetTypeInfoCount | Recupera el número de interfaces de información de tipo que proporciona un objeto (0 ó 1). |
|
_Thread.Invoke | Proporciona acceso a las propiedades y los métodos expuestos por un objeto. |
Un proceso puede crear uno o varios subprocesos para ejecutar una parte del código de programa asociado al proceso. Utilice un delegado ThreadStart o el delegado ParameterizedThreadStart para especificar el código del programa ejecutado por un subproceso. El delegado ParameterizedThreadStart permite pasar datos al procedimiento de subproceso.
A lo largo de su existencia, un subproceso siempre se encuentra en uno o más estados definidos por ThreadState. Se puede solicitar un nivel de prioridad de programación (tal y como lo define ThreadPriority) para un subproceso, pero no se garantiza que el sistema operativo lo conceda.
GetHashCode proporciona identificación a los subprocesos administrados. Mientras dure el subproceso, no coincidirá con el valor de ningún otro subproceso, independientemente del dominio de aplicación del que se obtenga el valor.
Nota
|
|---|
|
Un ThreadId del sistema operativo no tiene relación fija con un subproceso administrado, puesto que un host no administrado puede controlar la relación entre los subprocesos administrados y los no administrados. Concretamente, un host sofisticado puede utilizar la API Hosting de CLR para programar muchos subprocesos administrados en el mismo subproceso del sistema operativo, o mover un subproceso administrado de unos subprocesos de sistema operativo a otros. |
No es necesario conservar una referencia a un objeto Thread una vez que se ha iniciado el subproceso. El subproceso continúa ejecutándose hasta que se completa el procedimiento de subproceso.
Importante
|
|---|
|
Comenzando con .NET Framework versión 4, se cambia el comportamiento de algunos constructores de subproceso: únicamente el código de plena confianza puede establecer el tamaño de pila máximo en un valor que es mayor que el tamaño de pila predeterminado (1 megabyte). Si un valor mayor se especifica cuando el código se está ejecutando con confianza parcial, se omite el valor mayor y se utiliza el tamaño de pila predeterminado. No se produce ninguna excepción. El código en cualquier nivel de confianza puede establecer el tamaño de pila máximo en un valor que es menor que el tamaño de pila predeterminado. |
En el siguiente ejemplo de código se muestra la funcionalidad de un subproceso simple.
using System; using System.Threading; // Simple threading scenario: Start a static method running // on a second thread. public class ThreadExample { // The ThreadProc method is called when the thread starts. // It loops ten times, writing to the console and yielding // the rest of its time slice each time, and then ends. public static void ThreadProc() { for (int i = 0; i < 10; i++) { Console.WriteLine("ThreadProc: {0}", i); // Yield the rest of the time slice. Thread.Sleep(0); } } public static void Main() { Console.WriteLine("Main thread: Start a second thread."); // The constructor for the Thread class requires a ThreadStart // delegate that represents the method to be executed on the // thread. C# simplifies the creation of this delegate. Thread t = new Thread(new ThreadStart(ThreadProc)); // Start ThreadProc. Note that on a uniprocessor, the new // thread does not get any processor time until the main thread // is preempted or yields. Uncomment the Thread.Sleep that // follows t.Start() to see the difference. t.Start(); //Thread.Sleep(0); for (int i = 0; i < 4; i++) { Console.WriteLine("Main thread: Do some work."); Thread.Sleep(0); } Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends."); t.Join(); Console.WriteLine("Main thread: ThreadProc.Join has returned. Press Enter to end program."); Console.ReadLine(); } }
Este código genera el siguiente resultado:
[VB, C++, C#] Main thread: Start a second thread. Main thread: Do some work. ThreadProc: 0 Main thread: Do some work. ThreadProc: 1 Main thread: Do some work. ThreadProc: 2 Main thread: Do some work. ThreadProc: 3 Main thread: Call Join(), to wait until ThreadProc ends. ThreadProc: 4 ThreadProc: 5 ThreadProc: 6 ThreadProc: 7 ThreadProc: 8 ThreadProc: 9 Main thread: ThreadProc.Join has returned. Press Enter to end program.
Windows 7, Windows Vista SP1 o posterior, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (no se admite Server Core), Windows Server 2008 R2 (se admite Server Core con SP1 o posterior), Windows Server 2003 SP2
.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.
Nota
Importante