System.timer не генерирует события и консоль немедленно завершает работу - PullRequest
2 голосов
/ 19 марта 2020

Мне нужен таймер, который запускается каждую минуту, но у меня возникают проблемы с запуском таймера с кодом, который я использовал раньше. так что я думаю, что я делаю что-то в корне неправильно, это не связано с кодом, но даже в только что созданном консольном проекте в Visual Studio Community 2017 он не выполняет метод _timer_elapsed. консоль немедленно завершается без ошибок, как если бы она выполнила каждый код

using System;
using System.Timers;

namespace Test
{
    class Program
    {

        static Timer _timer;

        public static void Main(string[] args)
        {
            var timer = new Timer(60000);
            timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);
            timer.Enabled = true;
            _timer = timer;
        }
        static void _timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            Console.WriteLine("test");
        }
    }
}

что мне здесь не хватает?

Ответы [ 2 ]

7 голосов
/ 19 марта 2020

Вам нужна ваша программа, чтобы остаться в живых, а не возвращаться с Main. Быстрый и простой способ сделать это - дождаться ввода в конце:

public static void Main(string[] args)
{
    var timer = new Timer(60000);
    timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);
    timer.Enabled = true;
    _timer = timer;

    Console.ReadLine();
}
1 голос
/ 19 марта 2020

Плохого вопроса не бывает. (Хотя некоторые вопросы демонстрируют большую близость к программированию, а некоторые - меньше.)

Если вы посмотрите на свой код, ваш основной установит таймер, а затем продолжит работу. Поэтому, конечно, ваша программа завершается немедленно, и таймер никогда не срабатывает.

Чтобы увидеть срабатывание таймера, ваша программа должна продолжать работать, по крайней мере, один период вашего таймера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...