2014-01-23 102 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'是等價的。 –

相關問題