当我调用方法random_Start()时,它首先起作用:第二个控制台打印在合理的时间出现,但是随后控制台打印之间的间隙越来越小。
经过几次打印后,几乎所有打印都在不到5秒的时间内完成,尽管代码应该将Timer设置为至少5秒,对吧?
static Timer timer;
static Random random = new Random();
public static void random_Start()
{
timer = new Timer(random.NextDouble()*10000+5000);
timer.Elapsed += OnTimedEvent;
timer.Start();
Console.WriteLine("Start");
}
private static void OnTimedEvent(Object source, ElapsedEventArgs e)
{
random_Start();
}
答案 0 :(得分:1)
设置您的计时器,以免您每次创建计时器时都创建一个新实例。在下面的示例中,我禁用了AutoReset
,以便我们可以设置新的间隔并手动重新启动计时器。
static Timer timer;
static Random random = new Random();
public static void random_Start()
{
timer = new Timer(random.NextDouble()*10000+5000);
timer.Elapsed += OnTimedEvent;
timer.AutoReset = false;
timer.Start();
Console.WriteLine("Start");
}
private static void OnTimedEvent(Object source, ElapsedEventArgs e)
{
Console.WriteLine("Tick");
timer.Interval = random.NextDouble()*10000+5000;
timer.Start();
}