fork download
  1. using System;
  2. using System.Threading;
  3.  
  4. namespace Recetas.CSharp.Cap04.R0406
  5. {
  6. class DatosThreadStart
  7. {
  8. // Campos y propiedades:
  9. private readonly int iteraciones;
  10. private readonly string mensaje;
  11. private readonly int retraso;
  12.  
  13. public int Iteraciones
  14. {
  15. get
  16. {
  17. return iteraciones;
  18. }
  19. }
  20. public string Mensaje
  21. {
  22. get
  23. {
  24. return mensaje;
  25. }
  26. }
  27. public int Retraso
  28. {
  29. get
  30. {
  31. return retraso;
  32. }
  33. }
  34.  
  35. // constructor:
  36. public DatosThreadStart (int iteraciones, string mensaje, int retraso)
  37. {
  38. this.iteraciones = iteraciones;
  39. this.mensaje = mensaje;
  40. this.retraso = retraso;
  41. }
  42. }
  43.  
  44. public sealed class MetodoEnNuevoThread
  45. {
  46. public static void Main()
  47. {
  48. // Crea un nuevo Thread para ejecutar el método
  49. // MostrarMensaje:
  50. Thread threadNuevo = new Thread(
  51. new ParameterizedThreadStart ( MostrarMensaje)
  52. );
  53.  
  54. // Este thread se ejecuta en primer plano:
  55. threadNuevo.IsBackground = false;
  56.  
  57. // Creación de instancia DatosThreadStart para
  58. // configuración del nuevo thread:
  59. DatosThreadStart configuracion =
  60. new DatosThreadStart (5, "Thread nuevo en ejecución.", 500);
  61.  
  62. VisorMensajesThread ("Inicio de un nuevo thread.");
  63.  
  64. // Inicia la ejecución del nuevo thread:
  65. threadNuevo.Start (configuracion);
  66.  
  67. // Main continua con otras tareas:
  68. for (int i = 0; i < 13; ++i)
  69. {
  70. VisorMensajesThread ("El thread Main continua su ejecución.");
  71. Thread.Sleep (200);
  72. }
  73.  
  74. Console.WriteLine ("\nLa ejecución de Main ha terminado. Presione Enter.");
  75. Console.ReadLine ();
  76. }
  77.  
  78. // Este método presenta información en pantalla
  79. // de acuerdo a la configuración de ejecución
  80. // representada en un objeto de clase DatosThreadStart:
  81. private static void MostrarMensaje(object configuracion)
  82. {
  83. DatosThreadStart datos = configuracion as DatosThreadStart;
  84.  
  85. if (datos != null)
  86. {
  87. for (int i = 0; i < datos.Iteraciones; ++i)
  88. {
  89. VisorMensajesThread(datos.Mensaje);
  90.  
  91. // Suspende (pausa) el thread por un período específico:
  92. Thread.Sleep (datos.Retraso);
  93. }
  94. }
  95. }
  96.  
  97. // Método para la visualización de información
  98. // del estado actual de un thread:
  99. private static void VisorMensajesThread(string mensaje)
  100. {
  101. Console.WriteLine ("[{0,3}] - {1} : {2}",
  102. Thread.CurrentThread.ManagedThreadId,
  103. DateTime.Now.ToString ("HH:mm:ss.ffff"), mensaje);
  104. }
  105. }
  106. }
Success #stdin #stdout 0.05s 34936KB
stdin
Standard input is empty
stdout
[  1] - 17:10:43.7248 : Inicio de un nuevo thread.
[  1] - 17:10:43.7564 : El thread Main continua su ejecución.
[  3] - 17:10:43.7566 : Thread nuevo en ejecución.
[  1] - 17:10:43.9566 : El thread Main continua su ejecución.
[  1] - 17:10:44.1567 : El thread Main continua su ejecución.
[  3] - 17:10:44.2567 : Thread nuevo en ejecución.
[  1] - 17:10:44.3567 : El thread Main continua su ejecución.
[  1] - 17:10:44.5568 : El thread Main continua su ejecución.
[  3] - 17:10:44.7568 : Thread nuevo en ejecución.
[  1] - 17:10:44.7569 : El thread Main continua su ejecución.
[  1] - 17:10:44.9570 : El thread Main continua su ejecución.
[  1] - 17:10:45.1571 : El thread Main continua su ejecución.
[  3] - 17:10:45.2569 : Thread nuevo en ejecución.
[  1] - 17:10:45.3572 : El thread Main continua su ejecución.
[  1] - 17:10:45.5573 : El thread Main continua su ejecución.
[  3] - 17:10:45.7570 : Thread nuevo en ejecución.
[  1] - 17:10:45.7573 : El thread Main continua su ejecución.
[  1] - 17:10:45.9574 : El thread Main continua su ejecución.
[  1] - 17:10:46.1575 : El thread Main continua su ejecución.

La ejecución de Main ha terminado. Presione Enter.