-3

在我的 C# 应用程序中,我需要基于计时器调用方法。当我启动程序时,我希望计时器开始 - 然后每 10 秒调用一次方法。

第二 - 如果我在 10 秒跨度到期之前手动调用该方法,我希望计时器重置 - 并在执行后等待 10 秒(不会触发)。换句话说 - 如果计时器还剩 6 秒,并且我手动触发 - 我希望计时器等待 10 秒 - 而不是在 6 秒时触发。

  1. 创建这样的计时器的最佳方法是什么?
  2. 有了计时器后,如何有效控制它的手动到期?
4

1 回答 1

1

System.Timer.Timer类适合您的所有需求。

我希望计时器开始 - 然后每 10 秒调用一次方法。

第一部分很简单,您需要将interval属性设置为 10000,将AutoReset属性设置为 true 并处理Elapsed事件。

第二 - 如果我在 10 秒跨度到期之前手动调用该方法,我希望计时器重置 - 并在执行后等待 10 秒

手动触发其实没那么容易。最好的方法是停止它,在经过的事件中执行它要执行的任何操作,然后重新启动它。

然而,有一个重要的注意事项。您需要确保处理方法是可重入的,因为计时器在另一个线程上执行,而不是手动触发的线程。如果您的方法可能需要 10 秒才能执行,这也是一个问题。使用是最简单的方法。

为了演示计时器,这里有一个小程序,当您按下回车键时将手动触发,然后等待两秒钟再次触发。

class Program
{
    static void Main(string[] args)
    {

        var timer = new System.Timers.Timer();
        timer.Interval = 2000; // 2 seconds here
        timer.AutoReset = true; //Restart 


        Action<object, EventArgs> Elapsed = (object o, EventArgs e) => Console.WriteLine(DateTime.Now);

        timer.Elapsed += new System.Timers.ElapsedEventHandler(Elapsed);
        timer.Start();
        while (Console.ReadLine() != "quit")
        {
            timer.Stop();
            Elapsed.Invoke(new object(), EventArgs.Empty);
            timer.Start();

        }
    }
}
于 2012-12-04T19:11:36.903 回答