martes, 8 de diciembre de 2015

Hilos con C# (Threads) , detener un hilo.

Para detener la ejecución de un hilo puede usar Thread.Abort. Cuando este método es ejecutado por otro hilo se lanza una excepción, ThreadAbortException. Puede dejar un estado corrupto y hace que la aplicación quede sin poder usarse.

Una mejor forma de detener un hilo es usar una variable compartida tanto para el hilo principal y el subordinado. En el siguiente ejemplo se utiliza un variable compartida. El hilo es inicializado con una expresión lambda (la cual es una expresión corta de un delegado). El hilo se mantiene en ejecución hasta que la variable detener es true. Después que el método Join() es invocado la aplicación espera hasta que el hilo termina de ejecutarse.

using System;
using System.Threading;

namespace DeteniendoHilos
{
    
    class Program
    {
        static void Main(string[] args)
        {
            bool detener = false;

            Thread hilo = new Thread(new ThreadStart(() => 
                {
                    int ni = 0;

                    while (!detener)
                    {
                        Console.WriteLine("Ejecutando ... {0}", ni++);
                        // se detiene por un segundo
                        Thread.Sleep(10000);
                    }
                }));

            hilo.Start();
            Console.WriteLine("Presione cualquier tecla para salir");
            Console.ReadKey();

            detener = true;
            hilo.Join();
            
        }
    }
}


Referencia:
Exam Ref 70-483 Programming in C#


No hay comentarios.:

Publicar un comentario