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();
    }