我一直在调查Timer类(http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx),但关于计时器的事情是,它正在进行中。有一种方法可以一次性阻止它吗?或者5点之后?
现在我正在做以下事情:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;
namespace TimerTest
{
class Program
{
private static System.Timers.Timer aTimer;
static void Main(string[] args)
{
DoTimer(1000, delegate
{
Console.WriteLine("testing...");
aTimer.Stop();
aTimer.Close();
});
Console.ReadLine();
}
public static void DoTimer(double interval, ElapsedEventHandler elapseEvent)
{
aTimer = new Timer(interval);
aTimer.Elapsed += new ElapsedEventHandler(elapseEvent);
aTimer.Start();
}
}
}
答案 0 :(得分:5)
现在没有按照你现在的方式进行。 Elapsed事件会被提升一次并停止,因为您已调用Stop。无论如何,改变你的代码,如下所示,以实现你想要的。
private static int iterations = 5;
static void Main()
{
DoTimer(1000, iterations, (s, e) => { Console.WriteLine("testing..."); });
Console.ReadLine();
}
static void DoTimer(double interval, int iterations, ElapsedEventHandler handler)
{
var timer = new System.Timers.Timer(interval);
timer.Elapsed += handler;
timer.Elapsed += (s, e) => { if (--iterations <= 0) timer.Stop(); };
timer.Start();
}
答案 1 :(得分:4)
为什么不只有int
计数器最初从0开始,并且每次ElapsedEventHandler
被触发时都会递增?然后,如果计数器超过迭代次数,您只需在事件处理程序中添加一个检查Stop()
计时器。
答案 2 :(得分:0)
使用System.Threading.Timer并指定dueTime,但指定一段Timeout.Infinite。
答案 3 :(得分:0)
public static void DoTimer(double interval, ElapsedEventHandler elapseEvent)
{
aTimer = new Timer(interval);
aTimer.Elapsed += new ElapsedEventHandler(elapseEvent);
aTimer.Elapsed += new ElapsedEventHandler( (s, e) => ((Timer)s).Stop() );
aTimer.Start();
}
答案 4 :(得分:0)
通过创建给定类的对象,您可以在任何类中使用计时器
public class timerClass
{
public timerClass()
{
System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
// Set the Interval to 5 seconds.
aTimer.Interval = 5000;
aTimer.Enabled = true;
}
public static void OnTimedEvent(object source, ElapsedEventArgs e)
{
Console.Writeln("Welcome to TouchMagix");
}
}