¿Hay una clase de temporizador en C # que no esté en el espacio de nombres de Windows.Forms?
-
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?
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
.