在我的C#应用程序中,我需要调用基于计时器的方法。当我启动程序时,我希望定时器开始 - 然后每隔10秒调用一次方法。其次 - 如果我在10秒范围的期满之前手动调用该方法,我希望定时器重置 - 并等待执行10秒(当它有时不会触发)。换句话说 - 如果计时器则位于6秒的时候,我手动触发 - 我希望计时器等待10秒 - 在6获取计时事件
- 什么是创建这样一个计时器的最好方法不火?
- 一旦我有了计时器,我该如何有效地控制它的手动过期?
在我的C#应用程序中,我需要调用基于计时器的方法。当我启动程序时,我希望定时器开始 - 然后每隔10秒调用一次方法。其次 - 如果我在10秒范围的期满之前手动调用该方法,我希望定时器重置 - 并等待执行10秒(当它有时不会触发)。换句话说 - 如果计时器则位于6秒的时候,我手动触发 - 我希望计时器等待10秒 - 在6获取计时事件
System.Timer.Timer类适合所有你需要的。
我想让计时器开始 - 然后每10秒调用一次方法。
这第一部分是容易的,你需要给interval属性设置为10000,该AutoReset属性为true并处理Elapsed事件。
二 - 如果我手动调用之前10秒跨度的 到期的方法中,我希望定时器复位 - 并从 执行
手动触发等待10秒实际上没有那么简单。最好的办法就是停下来,在流逝的事件中做任何事情,然后重新启动它。
但是这里有一个很大的提示。您需要确保处理方法是可重入的,因为计时器在另一个线程上执行,而不是手动触发的。如果您的方法可能需要10秒钟才能执行,这也是一个问题。使用lock是最简单的方法。
为了演示这个计时器,这里有一个小程序,当你按下回车键后会手动启动,然后等待两秒钟再次启动。
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();
}
}
}
http://www.dotnetperls.com/timer –
你可以发布一些代码或伪代码,所以我们可以帮忙吗? –
'System.Threading.Timer'是你要走的路。看看[MSDN](http://msdn.microsoft.com/en-us/library/system.threading.timer.aspx)以供参考 – Spontifixus