在Windows服务中,我想一小时一次一次。我想使用轮询计时器,而不是添加“Windows任务”。
在计时器回调中,我正在检查是否通过以下代码调用该方法,其中_config.PollingInterval是计时器的间隔。
if (DateTime.Now.Subtract(new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, 0, 0)) < TimeSpan.FromMilliseconds(_config.PollingInterval)) {
SendReport();
}
由于某种原因,在同一分钟内(例如08:00)满足条件两次。我想某处存在逻辑错误,因为它确保只有一个计时器。
有关工作甚至完全不同/更优雅方法的任何提示吗?
答案 0 :(得分:0)
可能是这样的:
class Reporter
{
int _HourLastRun;
public Reporter()
{
_HourLastRun = -1;
}
public void SendIfNeeded()
{
var currentHour = DateTime.Now.Hour;
if(currentHour != _HourLastRun)
{
_HourLastRun = currentHour;
SendReport();
}
}
}
然后只需在创建计时器的情况下实例化此类,并将SendIfNeeded()
放入计时器的回调中。