¿Cuál es la mejor manera de implementar un “temporizador”?

Posible duplicado:
Cómo se agrega un temporizador a una aplicación de consola C #

¿Cuál es la mejor manera de implementar un temporizador? ¡Una muestra de código sería genial! Para esta pregunta, “mejor” se define como el más confiable (el menor número de fallas) y preciso. Si especifico un intervalo de 15 segundos, quiero que se invoque el método objective cada 15 segundos, no cada 10-20 segundos. Por otro lado, no necesito una precisión de nanosegundos. En este ejemplo, sería aceptable que el método se dispare cada 14.51 – 15.49 segundos.

Usa la clase Timer .

https://msdn.microsoft.com/en-us/library/system.timers.timer(v=vs.110).aspx

 public static void Main() { System.Timers.Timer aTimer = new System.Timers.Timer(); aTimer.Elapsed+=new ElapsedEventHandler(OnTimedEvent); aTimer.Interval=5000; aTimer.Enabled=true; Console.WriteLine("Press \'q\' to quit the sample."); while(Console.Read()!='q'); } // Specify what you want to happen when the Elapsed event is raised. private static void OnTimedEvent(object source, ElapsedEventArgs e) { Console.WriteLine("Hello World!"); } 

El evento Elapsed se boostá cada X cantidad de milisegundos, especificada por la propiedad Interval en el objeto Timer. OnTimedEvent método del Event Handler que especifique, en el ejemplo de arriba es OnTimedEvent

Al usar la clase System.Windows.Forms.Timer puede lograr lo que necesita.

 System.Windows.Forms.Timer t = new System.Windows.Forms.Timer(); t.Interval = 15000; // specify interval time as you want t.Tick += new EventHandler(timer_Tick); t.Start(); void timer_Tick(object sender, EventArgs e) { //Call method } 

Al usar el método stop () puede detener el temporizador.

 t.Stop(); 

No está claro qué tipo de aplicación vas a desarrollar (computadora de escritorio, web, consola …)

La respuesta general, si está desarrollando la aplicación Windows.Forms , es el uso de

System.Windows.Forms.Timer clase. El beneficio de esto es que se ejecuta en el subproceso de UI de UI , por lo que es simple simplemente definirlo, suscribirse a su evento Tick y ejecutar su código cada 15 segundos.

Si hace algo más que los formularios de Windows (no está claro a partir de la pregunta), puede elegir System.Timers.Timer , pero este se ejecuta en otro hilo, por lo que si va a actuar en algunos elementos de UI del evento Elapsed , debes administrarlo con acceso de “invocación”.

Refiérase a ServiceBase a su clase y coloque el siguiente código en el evento OnStart :

Constants.TimeIntervalValue = 1 (hora) .. Idealmente, debe establecer este valor en el archivo de configuración.

StartSendingMails = nombre de la función que desea ejecutar en la aplicación.

  protected override void OnStart(string[] args) { // It tells in what interval the service will run each time. Int32 timeInterval = Int32.Parse(Constants.TimeIntervalValue) * 60 * 60 * 1000; base.OnStart(args); TimerCallback timerDelegate = new TimerCallback(StartSendingMails); serviceTimer = new Timer(timerDelegate, null, 0, Convert.ToInt32(timeInterval)); }