2017-04-05 29 views
0

我正在創建Windows服務。我想每30秒運行一次服務。C#定時器一次只消耗一個實例

所以我使用下面的代碼在Windows服務啓動使用計時器。

protected override void OnStart(string[] args) 
     { 
      timer1 = new Timer(); 
      timer1.Interval = 30000; 
      timer1.Elapsed += new ElapsedEventHandler(timer1_tick); 
      timer1.Start(); 
     } 

在timer1_tick函數中,我正在執行一些操作,如更新用戶詳細信息,上傳和下載文件。

但是我不確定上述操作會在30秒內完成。 所以我想一次運行一個。

這裏timer1_tick函數每確切30秒調用一次。只有在timer1_tick函數完成每項任務時纔會發生這種情況。

如何做到這一點?

+0

在你的計時器的tick事件中停止計時器,做你的邏輯,最後再次啓動計時器。 – Hakunamatata

回答

2

你應該停止計時,等待上傳文件的下載使用Timer.Stop();Timer.Start()完成:

void timer1_tick(...){ 
    timer1.Stop(); 
    //Do your download, upload, etc. 
    timer1.Start(); 
} 

希望它能幫助!

+0

沒問題。祝你好運! :) – mindOfAi

+1

@JeevaJsb我會在try..catch..finally中包裝tick動作,並在finally塊中重新啓動計時器。如果計時器事件中的邏輯出現問題,您不希望Windows服務崩潰,下一次冒險計時器無法運行。 – Hakunamatata

+0

@JeevaJsb這是一個很好的建議。我總是用我的方法嘗試......趕上。 – mindOfAi

0

根據您的要求使用異步編程。這可能對你有所幫助。謝謝

timer1.Elapsed += new ElapsedEventHandler(await timer1_tick); 

async Task<void> timer1_tick() 
{ 
//Do your download, upload, etc. 
}