¿Hay una clase de temporizador en C # que no esté en el espacio de nombres de Windows.Forms?

StackOverflow https://stackoverflow.com/questions/169332

  •  05-07-2019
  •  | 
  •  

Pregunta

Quiero usar un temporizador en mi aplicación simple .NET escrita en C #. El único que puedo encontrar es la clase Windows.Forms.Timer. No quiero hacer referencia a este espacio de nombres solo para mi aplicación de consola.

¿Hay una clase de temporizador de C # (o como temporizador) para usar en aplicaciones de consola?

¿Fue útil?

Solución

System.Timers.Timer

Y como dice MagicKat:

System.Threading.Timer

Puedes ver las diferencias aquí: http://intellitect.com/system-windows-forms-timer-vs-system-threading-timer-vs-system-timers-timer/

Y puedes ver ejemplos de MSDN aquí:

http://msdn.microsoft .com / en-us / library / system.timers.timer (VS.80) .aspx

Y aquí:

http://msdn.microsoft .com / en-us / library / system.threading.timer (VS.80) .aspx

Otros consejos

Recomendaría el Timer clase en System.Timers espacio de nombres. También de interés, el Timer clase en System.Threading espacio de nombres.

using System;
using System.Timers;

public class Timer1
{
    private static Timer aTimer = new System.Timers.Timer(10000);

    public static void Main()
    {
        aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
        aTimer.Enabled = true;

        Console.WriteLine("Press the Enter key to exit the program.");
        Console.ReadLine();
    }

    // Specify what you want to happen when the Elapsed event is 
    // raised.
    private static void OnTimedEvent(object source, ElapsedEventArgs e)
    {
        Console.WriteLine("The Elapsed event was raised at {0}", e.SignalTime);
    }
}

Ejemplo de los documentos de MSDN.

Hay al menos el System.Timers.Timer y System.Threading.Timer clases que yo Estoy al tanto de

Una cosa a tener en cuenta (si aún no lo has hecho antes), di si ya tienes el espacio de nombres System.Threading en tu cláusula de uso pero realmente quieres usar el temporizador en System.Timers que necesitas para hacer esto:

using System.Threading;
using Timer = System.Timers.Timer;

Jon Skeet tiene un artículo sobre Timers en su guía de subprocesos múltiples, vale la pena leerlo: http://www.yoda.arachsys.com/csharp/threads/timers.shtml

Esta pregunta es antigua y las respuestas existentes cubren bien el problema tal como era en ese momento. Mientras tanto, algo nuevo ha sucedido.

Temporizador, claro, ¿para qué?

El uso de un temporizador es una forma de ejecutar algún procesamiento con cierto retraso y / o en intervalos regulares. Hay dos casos:

(1) es solo para ejecutar algunos códigos cortos periódicamente sin ningún problema con los subprocesos, sin problemas, sin problemas. Si el temporizador de Windows Forms no es adecuado, entonces System.Timers.Timer con su propiedad SynchronizingObject lo hace más sencillo que System.Threading.Timer .

(2) lo que está codificando está en el ámbito del procesamiento simultáneo asíncrono. Tradicionalmente, eso ha sido propenso a errores, es difícil de depurar, para corregirlo, sea cual sea el temporizador simple utilizado.

En el caso 2, puedes salirte con el enfoque tradicional, pero ten cuidado, la complejidad está al acecho y lista para comer, no solo una vez, sino en cualquier momento en que simplemente no tomas la mejor decisión, con efectos acumulativos.

Ahora tenemos algo mejor

Si su situación tiene que ver con algún tipo de " evento " manejo (independientemente de la forma en que esté codificado: pulsaciones de teclas, botones del mouse, bytes de un puerto serie, de una conexión de red, de mediciones, etc.), debe considerar la programación reactiva.

La Programación reactiva ha descubierto en los últimos años, de alguna manera, cómo codificar para estas situaciones, sin caer en trampas de complejidad.

Entonces, técnicamente, el siguiente enlace es una respuesta a la pregunta: es un temporizador que se encuentra en el espacio de nombres System.Reactive.Linq : Método Observable.Timer (System.Reactive.Linq)

Para ser justos, es un temporizador que viene y funciona bien con la mentalidad de Programación Reactiva y muchas cosas que cambian el juego. Sin embargo, puede o no ser la mejor herramienta, según el contexto.

Dado que esta pregunta está centrada en .NET, es posible que le interese Good Introducción al Marco Reactivo .NET

O para un documento claro, ilustrado, más general (no centrado en Microsoft), esto parece bueno Introducción a la programación reactiva que te has estado perdiendo .

System.Diagnostics.Stopwatch si está el objetivo es calcular el tiempo que tarda en ejecutarse

Se recomienda no usar la clase de temporizador de System.Timer .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top