none
Error al llamar por segunda vez a un timer RRS feed

  • Pregunta

  • Hola todos

    Para crear y resetear un timer en C# utilizo:

            static void EnableTimer()
            {
                /* Se crea el timer */
                TimerReadTags.Elapsed += OnTimedEvent;
                TimerReadTags.AutoReset = true;
                TimerReadTags.Enabled = true;
            }

            static void CloseTimer()
            {
                /* Se cancela el timer */
                TimerReadTags.Dispose();
                TimerReadTags.Stop();
            }

    Todo bien, pero si por alguna razón tengo que resetear el timer y volver a crearlo da un error.  Es decir:

    // Todo bien
    EnableTimer()
    CloseTimer()

    // Creo el timer por segunda vez
    EnableTimer()  --------------> da error al crearlo por segunda vez (aunque está reseteado)
    CloseTimer()

    Agradezco si alguien me puede ayudar.
    Un saludo.

    jueves, 21 de junio de 2018 12:41

Todas las respuestas

  • Hola Miguel Angel M M:

    EnableTimer() no crea el objeto, crea el manejador;

      public partial class Form1 :Form
        {
            System.Timers.Timer aTimer ;
            public Form1()
            {
                InitializeComponent();
            }
    
            public void EnableTimer()
            {
                aTimer =new System.Timers.Timer(10000);
                aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
    
                
                aTimer.AutoReset = false;
                aTimer.Enabled = true;
    
               
    
                
            }
            private static void OnTimedEvent(object source, ElapsedEventArgs e)
            {
                Console.WriteLine("Hello World!");
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                EnableTimer();
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                CloseTimer();
            }
    
           public void CloseTimer()
            {
                /* Se cancela el timer */
                aTimer.Stop();
                aTimer.Dispose();
                
            }
        }

    https://msdn.microsoft.com/es-es/library/system.timers.timer.autoreset(v=vs.100).aspx?cs-save-lang=1&cs-lang=csharp

    Un saludo

    jueves, 21 de junio de 2018 13:01
  • Hola Javier, 

    Muchas gracias por tu respuesta, pero efectivamente sí hago eso a mí me da un error. He encontrado la siguiente solución por si le pudiera valer a alguien:

            static void CloseTimer()
            {
                /* Se cancela el timer */
                TimerReadTags.Elapsed -= OnTimedEvent;
                TimerReadTags.AutoReset = true;
                TimerReadTags.Enabled = true;

                /* Se cancela el timer */
                //TimerReadTags.Dispose();
                //TimerReadTags.Stop();
            }

    ... como puedes ver, lo que hace es anular el evento de llamada.

    Muchas gracias por tu ayuda.
    Un saludo.

    jueves, 21 de junio de 2018 15:43