Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Con .NET, puede escribir aplicaciones que realicen varias operaciones al mismo tiempo. Las operaciones con el potencial de retrasar otras operaciones se pueden ejecutar en hilos independientes, un proceso conocido como multihilo o hilo libre.
Las aplicaciones que usan multithreading son más sensibles a la entrada del usuario, ya que la interfaz de usuario permanece activa a medida que las tareas que consumen muchos procesadores se ejecutan en subprocesos independientes. El multiproceso también es útil al crear aplicaciones escalables porque puede agregar subprocesos a medida que aumenta la carga de trabajo.
Nota:
Si necesita más control sobre el comportamiento de los subprocesos de la aplicación, puede administrar los subprocesos usted mismo. Sin embargo, la programación multiproceso se simplifica considerablemente con las clases System.Threading.Tasks.Parallel y System.Threading.Tasks.Task, Parallel LINQ (PLINQ), las clases de colección concurrentes en el espacio de nombres y un modelo de programación basado en el concepto de tareas en lugar de hilos. Para obtener más información, vea Parallel Programming and Task Parallel Library (TPL) (Programación paralela y biblioteca paralela de tareas [TPL]).
Cómo: Crear e iniciar un nuevo hilo
Para crear un subproceso nuevo, cree una nueva instancia de la clase System.Threading.Thread. Proporcione el nombre del método que desea ejecutar en el nuevo subproceso al constructor. Para iniciar un subproceso creado, llame al método Thread.Start. Para obtener más información y ejemplos, consulte el artículo Creación de subprocesos y paso de datos a la hora de inicio y la referencia de API Thread .
Cómo detener un hilo
Para finalizar la ejecución de un subproceso, use el System.Threading.CancellationToken. Proporciona una manera unificada de detener los subprocesos de forma cooperativa. Para más información, consulte Cancelación de subprocesos administrados.
A veces no es posible detener un subproceso de forma cooperativa porque ejecuta código de terceros no diseñado para la cancelación cooperativa. En este caso, es posible que desee finalizar su ejecución forzadamente. Para finalizar la ejecución de un subproceso forzosamente, en .NET Framework puede usar el método Thread.Abort. Ese método genera una excepción ThreadAbortException en el subproceso en el que se invoca. Para obtener más información, vea Destruir subprocesos. El Thread.Abort método no se admite en .NET Core. Si necesita finalizar la ejecución de código de terceros forzadamente en .NET Core, ejecútelo en el proceso independiente y use el Process.Kill método .
System.Threading.CancellationToken No está disponible antes de .NET Framework 4. Para detener un subproceso en versiones anteriores de .NET Framework, use las técnicas de sincronización de subprocesos para implementar manualmente la cancelación cooperativa. Por ejemplo, puede crear el campo shouldStop
booleano volátil y usarlo para solicitar el código ejecutado por el subproceso para detenerlo. Para obtener más información, vea Volatile in C# Reference and System.Threading.Volatile.
Use el método Thread.Join para hacer que el subproceso que realiza la llamada espere a la finalización del subproceso que se está deteniendo.
Procedimiento para pausar o interrumpir un subproceso
Se utiliza el método Thread.Sleep para pausar el subproceso actual durante un período de tiempo especificado. Puede interrumpir un subproceso bloqueado llamando al Thread.Interrupt método . Para obtener más información, consulte Pausar e interrumpir hilos.
Propiedades de subproceso
En la tabla siguiente se presentan algunas de las Thread propiedades:
Propiedad | Descripción |
---|---|
IsAlive | Devuelve true si un subproceso se ha iniciado y todavía no ha terminado con normalidad o se ha anulado. |
IsBackground | Obtiene o establece un valor booleano que indica si un subproceso es un subproceso en segundo plano. Los hilos en segundo plano son como los hilos en primer plano. Sin embargo, un hilo en segundo plano no impide que un proceso se detenga. Una vez que se han detenido todos los subprocesos en primer plano que pertenecen a un proceso, Common Language Runtime finaliza el proceso llamando al Abort método en subprocesos en segundo plano que todavía están activos. Para obtener más información, vea Subprocesos de primer y segundo plano. |
Name | Obtiene o establece el nombre de un subproceso. Suele usarse para detectar subprocesos individuales durante la depuración. |
Priority | Obtiene o establece un ThreadPriority valor que usa el sistema operativo para priorizar la programación de subprocesos. Para obtener más información, vea Planear subprocesos y la referencia de ThreadPriority. |
ThreadState | Obtiene un ThreadState valor que contiene los estados actuales de un subproceso. |