安排 Windows 每天 3:00am 为 运行 服务
Schedule Windows Service to run at 3:00am each day
protected override void OnStart(string[] args)
{
aTimer = new Timer();
var timer = System.Configuration.ConfigurationManager.AppSettings["Timer"].ToString(); //Appconfig "03:00"
var date = DateTime.Now;
DateTime scheduled = DateTime.ParseExact(timer, "HH:mm",
CultureInfo.InvariantCulture);
if (date > scheduled) scheduled = scheduled.AddDays(1);
var test = scheduled.Subtract(date).TotalMinutes;
aTimer.Interval = test;
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.Enabled = true;
aTimer.AutoReset = false;
}
上面的代码 运行 是第一次开始时,然后即使在每天 3:00am 将间隔设置为 运行 也不会再 运行 .
更新:
效果很好。我想知道如果我将计时器设置为每 1 秒 运行,它是否有可能与每个事件重叠。是否要等到活动结束再开始新活动?
AutoReset 应该为 true 才能多次引发事件。为什么将其设置为 false?
见https://docs.microsoft.com/en-us/dotnet/api/system.timers.timer.autoreset?view=net-5
但更好的是使用 windows 调度程序。如果重启或 restarted/stopped 服务,您的代码将无济于事。
protected override void OnStart(string[] args)
{
aTimer = new Timer();
var timer = System.Configuration.ConfigurationManager.AppSettings["Timer"].ToString(); //Appconfig "03:00"
var date = DateTime.Now;
DateTime scheduled = DateTime.ParseExact(timer, "HH:mm",
CultureInfo.InvariantCulture);
if (date > scheduled) scheduled = scheduled.AddDays(1);
var test = scheduled.Subtract(date).TotalMinutes;
aTimer.Interval = test;
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.Enabled = true;
aTimer.AutoReset = false;
}
上面的代码 运行 是第一次开始时,然后即使在每天 3:00am 将间隔设置为 运行 也不会再 运行 .
更新: 效果很好。我想知道如果我将计时器设置为每 1 秒 运行,它是否有可能与每个事件重叠。是否要等到活动结束再开始新活动?
AutoReset 应该为 true 才能多次引发事件。为什么将其设置为 false?
见https://docs.microsoft.com/en-us/dotnet/api/system.timers.timer.autoreset?view=net-5
但更好的是使用 windows 调度程序。如果重启或 restarted/stopped 服务,您的代码将无济于事。