fork download
  1. using System;
  2. using System.Threading;
  3.  
  4. namespace Recetas.CSharp.R0413
  5. {
  6. public sealed class FinalizarEjecucionThread
  7. {
  8. // Punto de entrada de ejecución de la aplicación:
  9. public static void Main()
  10. {
  11. Console.Title = "--- Terminación Ejecución de un Thread ---";
  12. Console.WriteLine ();
  13.  
  14. // Creación de una instancia de `Thread`:
  15. Thread t = new Thread (MostrarMensaje);
  16.  
  17. // Mensaje guía para el usuario:
  18. Console.WriteLine ("Inicio ejecución thread - {0} - {1}\n",
  19. DateTime.Now.ToString ("HH:mm:ss.ffff"),
  20. "Presione la tecla `Enter` para finalizar la ejecución."
  21. );
  22.  
  23. // Iniciar la ejecución del método `MostrarMensaje`:
  24. t.Start();
  25.  
  26. // Hasta que el usuario no presione la tecla `Enter`,
  27. // la ejecución del thread no finalizará:
  28. Console.ReadLine();
  29.  
  30. // Invoca al método `Abort` con un mensaje alusivo
  31. // al evento que finalizó la ejecución:
  32. t.Abort ("El usuario presionó `Enter`");
  33.  
  34. // Bloqueo temporal del thread `Main` para
  35. // realizar una espera de finalización del método
  36. // `MostrarMensaje`:
  37. t.Join();
  38.  
  39. // Mensaje de finalización:
  40. Console.WriteLine ("\nPresione `Enter` para terminar la aplicación.");
  41. Console.ReadLine();
  42. }
  43.  
  44. // Este método muestra información acerca de la
  45. // ejecución de un thread cada segundo:
  46. private static void MostrarMensaje()
  47. {
  48. try
  49. {
  50. while (true)
  51. {
  52. // Registro con la hora de generación
  53. // del mensaje:
  54. Console.WriteLine ("Thread en ejecución - {0}",
  55. DateTime.Now.ToString ("HH:mm:ss.ffff")
  56. );
  57.  
  58. // Pausa durante un (1) segundo:
  59. Thread.Sleep (1000);
  60. }
  61. }
  62. catch (ThreadAbortException tae)
  63. {
  64. // Muestra información acerca la generación de
  65. // la excepción ThreadAbortException, junto con
  66. // el estado de la excepción, además de la hora:
  67. Console.WriteLine ("\nTerminación de la ejecución del thread: {0} - {1}",
  68. (string) tae.ExceptionState,
  69. DateTime.Now.ToString ("HH:mm:ss.ffff")
  70. );
  71.  
  72. // Aquí podríamos incluir una llmada al método static
  73. // Thread.ResetAbort para cancelar la solicitud
  74. // de terminarción del thread:
  75. }
  76. }
  77. }
  78. }
Success #stdin #stdout 0.06s 35064KB
stdin
Standard input is empty
stdout
Inicio ejecución thread - 10:34:13.0449 - Presione la tecla `Enter` para finalizar la ejecución.

Thread en ejecución - 10:34:13.0649

Terminación de la ejecución del thread: El usuario presionó `Enter` - 10:34:13.0669

Presione `Enter` para terminar la aplicación.