Saltar al contenido

¿Cómo se agrega un temporizador a una aplicación de consola C#?

Mantén la atención porque en este enunciado vas a hallar la respuesta que buscas.Este enunciado fue probado por nuestros especialistas para garantizar la calidad y exactitud de nuestro post.

Solución:

Eso es muy bueno, sin embargo, para simular el paso del tiempo, necesitamos ejecutar un comando que lleva algo de tiempo y eso es muy claro en el segundo ejemplo.

Sin embargo, el estilo de usar un bucle for para hacer alguna funcionalidad para siempre requiere muchos recursos del dispositivo y, en su lugar, podemos usar el Recolector de basura para hacer algo así.

Podemos ver esta modificación en el código del mismo libro CLR Via C# Third Ed.

using System;
using System.Threading;

public static class Program 

   public static void Main() 
      // Create a Timer object that knows to call our TimerCallback
      // method once every 2000 milliseconds.
      Timer t = new Timer(TimerCallback, null, 0, 2000);
      // Wait for the user to hit 
      Console.ReadLine();
   

   private static void TimerCallback(Object o) 
      // Display the date/time when this method got called.
      Console.WriteLine("In TimerCallback: " + DateTime.Now);
      // Force a garbage collection to occur for this demo.
      GC.Collect();
   

Utilice la clase System.Threading.Timer.

System.Windows.Forms.Timer está diseñado principalmente para su uso en un solo subproceso, generalmente el subproceso de interfaz de usuario de Windows Forms.

También se agregó una clase System.Timers al principio del desarrollo del marco .NET. Sin embargo, generalmente se recomienda usar la clase System.Threading.Timer en su lugar, ya que de todos modos es solo una envoltura alrededor de System.Threading.Timer.

También se recomienda utilizar siempre un static (compartido en VB.NET) System.Threading.Timer si está desarrollando un servicio de Windows y requiere que un temporizador se ejecute periódicamente. Esto evitará la posible recolección prematura de basura de su objeto de temporizador.

Este es un ejemplo de un temporizador en una aplicación de consola:

using System; 
using System.Threading; 
public static class Program 
 
    public static void Main() 
     
       Console.WriteLine("Main thread: starting a timer"); 
       Timer t = new Timer(ComputeBoundOp, 5, 0, 2000); 
       Console.WriteLine("Main thread: Doing other work here...");
       Thread.Sleep(10000); // Simulating other work (10 seconds)
       t.Dispose(); // Cancel the timer now
    
    // This method's signature must match the TimerCallback delegate
    private static void ComputeBoundOp(Object state) 
     
       // This method is executed by a thread pool thread 
       Console.WriteLine("In ComputeBoundOp: state=0", state); 
       Thread.Sleep(1000); // Simulates other work (1 second)
       // When this method returns, the thread goes back 
       // to the pool and waits for another task 
    

Del libro CLR a través de C# por Jeff Richter. Por cierto, este libro describe la lógica detrás de los 3 tipos de temporizadores en el Capítulo 23, muy recomendable.

Aquí está el código para crear un simple tic del temporizador de un segundo:

  using System;
  using System.Threading;

  class TimerExample
  
      static public void Tick(Object stateInfo)
      
          Console.WriteLine("Tick: 0", DateTime.Now.ToString("h:mm:ss"));
      

      static void Main()
      
          TimerCallback callback = new TimerCallback(Tick);

          Console.WriteLine("Creating timer: 0n", 
                             DateTime.Now.ToString("h:mm:ss"));

          // create a one second timer tick
          Timer stateTimer = new Timer(callback, null, 0, 1000);

          // loop here forever
          for (; ; )
          
              // add a sleep for 100 mSec to reduce CPU usage
              Thread.Sleep(100);
          
      
  

Y aquí está la salida resultante:

    c:temp>timer.exe
    Creating timer: 5:22:40

    Tick: 5:22:40
    Tick: 5:22:41
    Tick: 5:22:42
    Tick: 5:22:43
    Tick: 5:22:44
    Tick: 5:22:45
    Tick: 5:22:46
    Tick: 5:22:47

EDITAR: Nunca es una buena idea agregar bucles de giro duro al código, ya que consumen ciclos de CPU sin obtener ganancias. En este caso, ese bucle se agregó solo para evitar que la aplicación se cierre, lo que permite observar las acciones del hilo. Pero en aras de la corrección y para reducir el uso de la CPU, se agregó una simple llamada de suspensión a ese ciclo.

Tienes la opción de animar nuestro estudio escribiendo un comentario o valorándolo te damos la bienvenida.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *