在我的 C# 应用程序中,我需要基于计时器调用方法。当我启动程序时,我希望计时器开始 - 然后每 10 秒调用一次方法。
第二 - 如果我在 10 秒跨度到期之前手动调用该方法,我希望计时器重置 - 并在执行后等待 10 秒(不会触发)。换句话说 - 如果计时器还剩 6 秒,并且我手动触发 - 我希望计时器等待 10 秒 - 而不是在 6 秒时触发。
- 创建这样的计时器的最佳方法是什么?
- 有了计时器后,如何有效控制它的手动到期?
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();
}
}
}