2014-01-23 88 views
0

我有一个问题,即最小定时器事件不会触发时它应该是,我将它设置为500毫秒的间隔,但正如我在我的logg中可以看到,这不符合预期的工作。我希望代码在等待0.5秒后执行,然后再次开始执行!定时器不间隔触发

public void initilize_Rfid() 
    { 
     _timerComm = new System.Timers.Timer(500); 
     _timerComm.Elapsed += CommTimerEvent; 
     _timerComm.Enabled = true; 
    } 

    private void CommTimerEvent(object source, ElapsedEventArgs e) 
    { 
     try 
     { 
      _timerComm.Enabled = false; 
      Logg("Inside CommTimerEvent " + _name); 

      //TALKING TO A SERIALPORT AND DETERMENATING IF TO CONTINUE WITH THE TIMER 

      if ((_continueTimer) 
      { 
       _timerComm.Enabled = true; 
       Logg("Re-activating timer " + _name); 
      } 
     } 
     catch (Exception ex) { Logg(ex.ToString()); } 
    } 

我可以看到文本“Inisde ComTimerEvent TEST1”,然后约0.8秒后,我得到了我的“重新激活计时器TEST1”。这一切都很好。但是在此之后,我得到一个长达3秒的延迟,直到定时器再次启动...我能以某种方式防止这种情况发生吗?

+0

'System.Timers.Timer'它具有'AutoReset'属性。将其设置为false并且计时器将只运行一次。然后,在计时器方法中,像你一样再次启动它。这样你就不需要一直停止/启动计时器。 –

+0

好的,但是能解决我的问题吗?由于问题在于,即使您将其设置为启用,计时器在正确的时间也没有被触发... – Nick3

+0

当输入事件处理程序时,您可以确定计时器已停止。你不需要关心停止它。停止/启动的开销可能会影响计时器的行为。但是,使用'System.Timers.Timer'时我从来没有注意到这些问题。启动计时器后你确定没有做其他事吗?你确定你明白'System.Timers.Timer'事件在不同于UI线程的线程中运行(异常可能会减慢速度)吗? –

回答

1

相反,您可以使用DispatcherTimer。以下代码将帮助您每5秒钟触发一次方法。

DispatcherTimer LabelTimer = new DispatcherTimer(); 
         LabelTimer.Interval = TimeSpan.FromSeconds(5); 
         LabelTimer.Tick += new EventHandler(TaskTimer_Tick_THROW); 
+0

这实际上做了我所要求的,这个代码在我重新启动计时器后0.5秒触发! – Nick3

+0

很高兴,它适合你!你可以接受答案,这样对别人会有帮助。 –

0

你丢失:

_timerComm.Start(); 

这将启动定时器。如果你这样说:

public void initilize_Rfid() 
{ 
    _timerComm = new System.Timers.Timer(500); 
    _timerComm.Elapsed += CommTimerEvent; 
    _timerComm.Enabled = true; 
    _timerComm.Start(); 
} 

如果你调用这个方法,你的代码应该可以工作。

+0

'Enabled = true'是等价的。 –

相关问题