2014-05-06 190 views
3

我想在時間t = 0到t = 10秒之間的200ms間隔內重複執行一些操作。在C#中停留一段時間後停止計時器

目前我正在跟蹤變量中的經過時間。這對我來說很不舒服。下面是代碼 -

using System; 
using System.Timers; 

class Program 
{ 
    static int interval = 200; // 0.2 seconds or 200 ms 
    static int totalTime = 10000; // 10 seconds or 10000 ms 
    static int elapsedTime = 0; // Elapsed time in ms 

    static Timer timer; 

    static void Main(string[] args) 
    { 
     timer = new Timer(interval); 
     timer.Elapsed += new ElapsedEventHandler(OnTimedEvent); 
     timer.Enabled = true; 

     Console.ReadKey(); // for checking 
    } 

    private static void OnTimedEvent(object source, ElapsedEventArgs e) 
    { 
     if (elapsedTime > totalTime) 
      timer.Stop(); 

     else 
     { 
      // here I am performing the task, which starts at t=0 sec to t=10 sec 
     } 
     elapsedTime += interval; 
    } 
} 

請提出,如果存在任何更好的方式來執行相同的任務。示例代碼總是讚賞。

回答

2

您應該在事件中停止計時器並重新開始,以確保您的執行不會兩次輸入事件。像:

private static void OnTimedEvent(object source, ElapsedEventArgs e) 
{ 
    timer.Stop(); 
    if (elapsedTime > totalTime) 
    { 
     return; 
    } 
    else 
    { 
     // here I am performing the task, which starts at t=0 sec to t=10 sec 
     timer.Enabled = true; //Or timer.Start(); 
    } 
    elapsedTime += interval; 
} 
+0

如果機器非常慢並且時間間隔非常短,則有可能在處理停止方法之前觸發新事件。可能永遠不會發生,但唯一的保證是嘗試獲取鎖定並退出,如果無法獲取 –

+0

@NewHire:如果我的任務(在其他塊內執行)需要100毫秒執行,該怎麼辦?在這種情況下,實際使用時間將是200ms + 100ms,這裏不考慮:( 您對此有何感想?如前所述,我想在200毫秒的延遲時間內從0到10秒重複執行此操作。 –

+0

@RaviJoshi,不會。你的消耗時間是200ms,因爲你的任務只需要100ms,而定時器會在再次發射之前等待100ms。 – user2711965