C# 定时器触发太早
C# Timer firing too early
当我调用方法 random_Start() 时,它首先起作用:第二个控制台打印在合理的时间出现,但随后控制台打印之间的差距越来越小。
在一些打印之后,几乎每次打印都不到 5 秒,尽管代码应该设置一个至少 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();
}
设置您的计时器,这样您就不会在每次计时器滴答时创建一个新实例。在下面的示例中,我已禁用 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();
}
当我调用方法 random_Start() 时,它首先起作用:第二个控制台打印在合理的时间出现,但随后控制台打印之间的差距越来越小。
在一些打印之后,几乎每次打印都不到 5 秒,尽管代码应该设置一个至少 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();
}
设置您的计时器,这样您就不会在每次计时器滴答时创建一个新实例。在下面的示例中,我已禁用 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();
}