Advertisement
Fhernd

FinalizarEjecucionThread.cs

Sep 3rd, 2014
3,447
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.94 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement