请看这段代码
public partial class TestService : ServiceBase
{
private static System.Timers.Timer aTimer;
protected override void OnStart(string[] args)
{
aTimer = new Timer(10000 * 6 * 5); // 5 minutes interval
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.Enabled = true;
}
private void OnTimedEvent(object source, ElapsedEventArgs e)
{
......
}
}
当我在下午4:00开始这项服务时,第一次调用OnTimedEvent是在下午4:05,然后是下午4:10,依此类推。我希望一旦启动服务就在下午4点调用OnTimedEvent。这里有什么我想念的吗?
答案 0 :(得分:0)
您可以在OnStart中调用该事件
OnTimedEvent(this, null)
答案 1 :(得分:0)
使用System.Threading.Timer
而不是System.Timers.Timer
。
它有一个constructor重载,除了指定间隔允许你选择启动延迟,可以设置为0立即触发。
有关计时器类的比较,请参阅Windows.Forms.Timer OR System.Threading.Timer(特别是“初始计时器事件可调度?”)
答案 2 :(得分:0)
System.Timers.Timer从5分钟开始倒计时,然后触发事件。因此,在计时器达到0之前,它将无法触发和运行代码。
代码可以在启用事件监听器之前运行,如下所示:
public partial class TestService : ServiceBase
{
private static System.Timers.Timer aTimer;
protected override void OnStart(string[] args)
{
aTimer = new Timer(10000 * 6 * 5); // 5 minutes interval
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
foo();
aTimer.Enabled = true;
}
private void OnTimedEvent(object source, ElapsedEventArgs e)
{
foo();
}
private void foo(){
.....
}
}