2014-02-08 75 views

回答

1

使用可用的多個定時器之一。 Systme.Timer作爲一種通用的一個,還有其他dpending上的用戶界面技術:

  • System.Timers.Timer
  • System.Threading.Timer
  • System.Windows.Forms.Timer
  • 系統。 Web.UI.Timer
  • System.Windows.Threading.DispatcherTimer

您可以檢查Why there are 5 Versions of Timer Classes in .NET?對於差異的說明。

如果您需要使用mroore精度(低至1ms)的內容,您可以使用本機計時器隊列 - 但這需要一些互操作編碼(或對Google的非常基本的理解)。

+0

你能給我一個示例代碼,它會每10秒調用一次函數f()嗎? –

+0

請注意,它可能永遠不會讓它每1ms執行一次。 Windows不是一個實時系統。 –

+0

其實它會。高精度計時器是爲此而設計的。有小的波動,但會自動調整。我已經成功地使用它們來安排從無記錄同步源的解碼堆棧重新編碼的視頻播放。 – TomTom

0

我更喜歡使用微軟的Reactive Framework(NuGet中的Rx-Main)。

var subscription = 
    Observable 
     .Interval(TimeSpan.FromSeconds(1.0)) 
     .Subscribe(x => 
     { 
      /* do something every second here */ 
     }); 

而且不需要時停止計時:

subscription.Dispose(); 

超級簡單!

1

您可以使用System.Timers.Timer

試試這個:

class Program 
{ 
    static System.Timers.Timer timer1 = new System.Timers.Timer(); 
    static void Main(string[] args) 
    { 
     timer1.Interval = 1000;//one second 
     timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Tick); 
     timer1.Start(); 
     Console.WriteLine("Press \'q\' to quit the sample."); 
     while (Console.Read() != 'q') ; 
    } 
    static private void timer1_Tick(object sender, System.Timers.ElapsedEventArgs e) 
    { 
     //do whatever you want 
     Console.WriteLine("I'm Inside Timer Elapsed Event Handler!"); 
    } 
} 
4

這裏是一個小片段打印出一條消息每10秒。

using System; 
public class AClass 
{ 
    private System.Timers.Timer _timer; 
    private DateTime _startTime; 

    public void Start() 
    { 
     _startTime = DateTime.Now; 
     _timer = new System.Timers.Timer(1000*10); // 10 seconds 
     _timer.Elapsed += timer_Elapsed; 
     _timer.Enabled = true; 
     Console.WriteLine("Timer has started"); 
    } 

    void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
    { 
     TimeSpan timeSinceStart = DateTime.Now - _startTime; 
     string output = string.Format("{0},{1}\r\n", DateTime.Now.ToLongDateString(), (int) Math.Floor(timeSinceStart.TotalMinutes)); 
     Console.Write(output); 
    } 
} 
相關問題