using System; using System.Threading; namespace Recetas.CSharp.Cap04.R0406 { class DatosThreadStart { // Campos y propiedades: private readonly int iteraciones; private readonly string mensaje; private readonly int retraso; public int Iteraciones { get { return iteraciones; } } public string Mensaje { get { return mensaje; } } public int Retraso { get { return retraso; } } // constructor: public DatosThreadStart (int iteraciones, string mensaje, int retraso) { this.iteraciones = iteraciones; this.mensaje = mensaje; this.retraso = retraso; } } public sealed class MetodoEnNuevoThread { public static void Main() { // Crea un nuevo Thread para ejecutar el método // MostrarMensaje: Thread threadNuevo = new Thread( new ParameterizedThreadStart ( MostrarMensaje) ); // Este thread se ejecuta en primer plano: threadNuevo.IsBackground = false; // Creación de instancia DatosThreadStart para // configuración del nuevo thread: DatosThreadStart configuracion = new DatosThreadStart (5, "Thread nuevo en ejecución.", 500); VisorMensajesThread ("Inicio de un nuevo thread."); // Inicia la ejecución del nuevo thread: threadNuevo.Start (configuracion); // Main continua con otras tareas: for (int i = 0; i < 13; ++i) { VisorMensajesThread ("El thread Main continua su ejecución."); Thread.Sleep (200); } Console.WriteLine ("\nLa ejecución de Main ha terminado. Presione Enter."); Console.ReadLine (); } // Este método presenta información en pantalla // de acuerdo a la configuración de ejecución // representada en un objeto de clase DatosThreadStart: private static void MostrarMensaje(object configuracion) { DatosThreadStart datos = configuracion as DatosThreadStart; if (datos != null) { for (int i = 0; i < datos.Iteraciones; ++i) { VisorMensajesThread(datos.Mensaje); // Suspende (pausa) el thread por un período específico: Thread.Sleep (datos.Retraso); } } } // Método para la visualización de información // del estado actual de un thread: private static void VisorMensajesThread(string mensaje) { Console.WriteLine ("[{0,3}] - {1} : {2}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString ("HH:mm:ss.ffff"), mensaje); } } }