我有一个计时器,它每30分钟调用一次load_to_DB方法。但如何使其与系统时间同步,每30分钟调用一次该方法?例如: 12:35,然后13:05,13:35,14:05等等。
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
}发布于 2020-07-09 09:07:10
如果需要手动设置开始日期和时间,请尝试此操作:
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");发布于 2020-07-09 08:57:16
显然,您使用的计时器是一个间隔计时器,每次调用开始时都会重复每个时间间隔。
实现您的计划的一种方法是从现在到下一次您想要计划的时间(例如在12:02,您希望将间隔设置为3分钟,但在12:05您希望将间隔设置为30分钟等)。
https://stackoverflow.com/questions/62811020
复制相似问题