2014-02-08 47 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); 
    } 
} 
相关问题