实现计时器的最佳方法是什么?一个代码样例会很棒!对于这个问题,“最佳”被定义为最可靠(失手次数最少)和精确。如果我指定的间隔为15秒,我希望目标方法每15秒调用一次,而不是每10 - 20秒调用一次。另一方面,我不需要纳秒的精度。在本例中,该方法每14.51 - 15.49秒发射一次是可以接受的。


使用Timer类。

public static void Main()
{
    System.Timers.Timer aTimer = new System.Timers.Timer();
    aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
    aTimer.Interval = 5000;
    aTimer.Enabled = true;

    Console.WriteLine("Press \'q\' to quit the sample.");
    while(Console.Read() != 'q');
}

 // Specify what you want to happen when the Elapsed event is raised.
 private static void OnTimedEvent(object source, ElapsedEventArgs e)
 {
     Console.WriteLine("Hello World!");
 }

由Timer对象上的Interval属性指定,每隔X毫秒就会引发Elapsed事件。它将调用您指定的事件处理程序方法。在上面的例子中,它是OnTimedEvent。


不清楚你要开发什么类型的应用程序(桌面、web、控制台……)

一般的答案,如果你在开发Windows。形式应用,就是使用

System.Windows.Forms.Timer类。这样做的好处是它运行在UI线程上,所以它很简单,只需定义它,订阅它的Tick事件,并每15秒运行一次代码。

如果你做其他的事情,然后windows窗体(从问题中不清楚),你可以选择System.Timers。定时器,但它运行在其他线程上,所以如果你要从它的消失事件中对某些UI元素采取行动,你必须通过“调用”访问来管理它。


通过使用System.Windows.Forms.Timer类,你可以实现你所需要的。

System.Windows.Forms.Timer t = new System.Windows.Forms.Timer();


t.Interval = 15000; // specify interval time as you want
t.Tick += new EventHandler(timer_Tick);
t.Start();

void timer_Tick(object sender, EventArgs e)
{
      //Call method
}

通过使用stop()方法可以停止计时器。

t.Stop();

引用ServiceBase到你的类,并把下面的代码放在OnStartevent中:

常量。TimeIntervalValue = 1 (hour)..理想情况下,你应该在配置文件中设置这个值。

startsendingmail =要在应用程序中运行的函数名。

 protected override void OnStart(string[] args)
        {
            // It tells in what interval the service will run each time.
            Int32 timeInterval = Int32.Parse(Constants.TimeIntervalValue) * 60 * 60 * 1000;
            base.OnStart(args);
            TimerCallback timerDelegate = new TimerCallback(StartSendingMails);
            serviceTimer = new Timer(timerDelegate, null, 0, Convert.ToInt32(timeInterval));
        }