C # Таймер стреляет слишком рано - PullRequest
1 голос
/ 31 мая 2019

Когда я вызываю метод 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();
        }

1 Ответ

1 голос
/ 31 мая 2019

Настройте свой таймер так, чтобы вы не создавали новый экземпляр с каждым тактом таймера. В приведенном ниже примере я отключил 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();
    }
...