Uso de subprocesos y subprocesamientoUsing threads and threading

Con .NET, se pueden escribir aplicaciones que realicen varias operaciones al mismo tiempo.With .NET, you can write applications that perform multiple operations at the same time. Las operaciones con la posibilidad de contener otras operaciones se pueden ejecutar en subprocesos independientes, lo que se conoce como multithreading o subprocesamiento libre.Operations with the potential of holding up other operations can execute on separate threads, a process known as multithreading or free threading.

Las aplicaciones que usan multithreading responden mejor a la entrada del usuario, ya que la interfaz de usuario permanece activa mientras las tareas que requieren un uso intensivo del procesador se ejecutan en subprocesos separados.Applications that use multithreading are more responsive to user input because the user interface stays active as processor-intensive tasks execute on separate threads. El multithreading también es útil cuando se crean aplicaciones escalables, porque se pueden agregar subprocesos a medida que aumenta la carga de trabajo.Multithreading is also useful when you create scalable applications, because you can add threads as the workload increases.

Nota

Si necesita más control sobre el comportamiento de los subprocesos de la aplicación, puede administrar los subprocesos por su cuenta.If you need more control over the behavior of the application's threads, you can manage the threads yourself. Pero a partir de .NET Framework 4, la programación multiproceso se ha simplificado significativamente con las clases System.Threading.Tasks.Parallel y System.Threading.Tasks.Task, Parallel LINQ (PLINQ), clases de colecciones simultáneas nuevas en el espacio de nombres System.Collections.Concurrent y un nuevo modelo de programación basado en el concepto de tareas en lugar de subprocesos.However, starting with the .NET Framework 4, multithreaded programming is greatly simplified with the System.Threading.Tasks.Parallel and System.Threading.Tasks.Task classes, Parallel LINQ (PLINQ), new concurrent collection classes in the System.Collections.Concurrent namespace, and a new programming model that is based on the concept of tasks rather than threads. Para obtener más información, vea Programación en paralelo y Biblioteca de procesamiento paralelo basado en tareas (TPL).For more information, see Parallel Programming and Task Parallel Library (TPL).

Procedimiento para crear e iniciar un subproceso nuevoHow to: Create and start a new thread

Un subproceso se crea mediante la creación de una instancia de la clase System.Threading.Thread y proporcionando al constructor el nombre del método que se quiere ejecutar en un subproceso nuevo.You create a new thread by creating a new instance of the System.Threading.Thread class and providing the name of the method that you want to execute on a new thread to the constructor. Para iniciar un subproceso creado, llame al método Thread.Start.To start a created thread, call the Thread.Start method. Para obtener más información y ejemplos, vea el artículo Creación de subprocesos y análisis de los datos en el inicio y la referencia de la API Thread.For more information and examples, see the Creating threads and passing data at start time article and the Thread API reference.

Procedimiento para detener un subprocesoHow to: Stop a thread

Para terminar la ejecución de un subproceso, use el método Thread.Abort.To terminate the execution of a thread, use the Thread.Abort method. Ese método genera una excepción ThreadAbortException en el subproceso en el que se invoca.That method raises a ThreadAbortException on the thread on which it's invoked. Para obtener más información, vea Destruir subprocesos.For more information, see Destroying threads.

A partir de .NET Framework 4, se puede usar System.Threading.CancellationToken para cancelar un subproceso de forma cooperativa.Beginning with the .NET Framework 4, you can use the System.Threading.CancellationToken to cancel a thread cooperatively. Para más información, consulte Cancelación de subprocesos administrados.For more information, see Cancellation in managed threads.

Use el método Thread.Join para hacer que el subproceso que realiza la llamada espere a la finalización del subproceso en el que se invoca el método.Use the Thread.Join method to make the calling thread wait for the termination of the thread on which the method is invoked.

Procedimiento para pausar o interrumpir un subprocesoHow to: Pause or interrupt a thread

El método Thread.Sleep se usa para pausar el subproceso actual durante un período de tiempo especificado.You use the Thread.Sleep method to pause the current thread for a specified amount of time. Un subproceso bloqueado se puede interrumpir mediante una llamada al método Thread.Interrupt.You can interrupt a blocked thread by calling the Thread.Interrupt method. Para obtener más información, vea Pausa e interrupción de subprocesos.For more information, see Pausing and interrupting threads.

Propiedades de subprocesoThread properties

En la tabla siguiente se muestran algunas de las propiedades de Thread:The following table presents some of the Thread properties:

Propiedad.Property DescripciónDescription
IsAlive Devuelve true si el subproceso se ha iniciado y todavía no ha terminado con normalidad o se ha anulado.Returns true if a thread has been started and has not yet terminated normally or aborted.
IsBackground Obtiene o establece un valor booleano que indica si un subproceso es un subproceso en segundo plano.Gets or sets a Boolean that indicates if a thread is a background thread. Los subprocesos en segundo plano son como los subprocesos en primer plano, con la diferencia de que un subproceso en segundo plano no impide que un proceso se detenga.Background threads are like foreground threads, but a background thread doesn't prevent a process from stopping. Una vez que se hayan detenido todos los subprocesos en primer plano que pertenecen a un proceso, Common Language Runtime finaliza el proceso mediante una llamada al método Abort en los subprocesos en segundo plano que continúan activos.Once all foreground threads that belong to a process have stopped, the common language runtime ends the process by calling the Abort method on background threads that are still alive. Para obtener más información, vea Subprocesos de primer y segundo plano.For more information, see Foreground and Background Threads.
Name Obtiene o establece el nombre de un subproceso.Gets or sets the name of a thread. Suele usarse para detectar subprocesos individuales durante la depuración.Most frequently used to discover individual threads when you debug.
Priority Obtiene o establece un valor ThreadPriority que el sistema operativo usa para dar prioridad a la programación de subprocesos.Gets or sets a ThreadPriority value that is used by the operating system to prioritize thread scheduling. Para obtener más información, vea Planear subprocesos y la referencia de ThreadPriority.For more information, see Scheduling threads and the ThreadPriority reference.
ThreadState Obtiene un valor ThreadState que contiene los estados actuales de un subproceso.Gets a ThreadState value containing the current states of a thread.

Vea tambiénSee also