c# таймер синхронизируется с системными часами - PullRequest
0 голосов
/ 09 июля 2020

У меня есть таймер, который вызывает метод load_to_DB каждые 30 минут. Но как заставить его вызывать метод каждые 30 минут синхронно с системным временем? Например: в 12:35, затем в 13:05, 13:35, 14:05 и т. Д. c.

static void Main(string[] args)
    {
        System.Timers.Timer timer = new System.Timers.Timer();
        timer.Interval = 1800000;
        timer.Elapsed += load_to_DB;
        timer.Start();
        Console.ReadLine();
    }

    // This method is called every 30 mins
    static void load_to_DB(object sender, System.Timers.ElapsedEventArgs e)
    {
        //method
    }

Ответы [ 2 ]

1 голос
/ 09 июля 2020

попробуйте это, если вам нужно вручную установить дату и время начала:


private static DateTime _NextCallTime;
private static int MinSteps = 30;

static void Main(string[] args)
{
    // you can manually set start Date and Time
    _NextCallTime = DateTime.Parse ("2020/5/12 12:35");
    System.Timers.Timer timer = new System.Timers.Timer() 
            {Interval= 31000, Enabled = true}; 
    timer.Elapsed += timer_Handler;
    Console.ReadLine();
}

// this timer checks every 31 seconds
static void timer_Handler(object sender, System.Timers.ElapsedEventArgs e)
{
    if (DateTime.Now.Date == _NextCallTime.Date
       && DateTime.Now.Hour == _NextCallTime.Hour
       && DateTime.Now.Minute == _NextCallTime.Minute)
    {
        _NextCallTime = _NextCallTime.AddMinutes(MinSteps);         
        load_to_DB();
    }
    
}

// This method is called every 30 mins at spesific periods (12:35 - 1:5 ...)
static void load_to_DB()
{
    //method
}

также, если вам нужно просто установить только время начала, а не дату:

// you can manually set start Time
_NextCallTime = DateTime.Parse($"{DateTime.Now.ToString("yyyy/MM/dd",System.Globalization.CultureInfo.InvariantCulture)} 12:35");
0 голосов
/ 09 июля 2020

Очевидно, что таймер, который вы используете, - это интервальный таймер, который будет повторять каждый интервал с момента вызова start.

Один из способов реализовать ваше расписание - это разобраться с текущим и следующим разом, когда вы хотите для расписания (например, в 12:02 вы хотите установить интервал в 3 минуты, но в 12:05 вы хотите установить интервал в 30 минут и т. д. c).

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