C#计时器触发得太早

时间:2019-05-31 19:24:04

标签: c# timer system.timers.timer

当我调用方法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();
        }

1 个答案:

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