C# 从windows服务中的OnStart开始,火灾计时器\u立即过期

C# 从windows服务中的OnStart开始,火灾计时器\u立即过期,c#,windows-services,timer,C#,Windows Services,Timer,我使用的是System.Timers.Timer,在c#windows服务中的OnStart方法中有如下代码 timer = new Timer(); timer.Elapsed += timer_Elapsed; timer.Enabled = true; timer.Interval = 3600000; timer.Start(); 这会导致从我启动服务后的一小时开始,每隔一小时执行timer\u appead中的代码。有没有办法让它在我启动服务时执行,然后每小时执行一次 timer\u

我使用的是
System.Timers.Timer
,在c#windows服务中的
OnStart
方法中有如下代码

timer = new Timer();
timer.Elapsed += timer_Elapsed;
timer.Enabled = true;
timer.Interval = 3600000;
timer.Start();
这会导致从我启动服务后的一小时开始,每隔一小时执行
timer\u appead
中的代码。有没有办法让它在我启动服务时执行,然后每小时执行一次


timer\u调用的方法运行时间太长,无法从
OnStart
直接调用,只需启动线程池线程调用辅助函数,就像timer那样。像这样:

        timer.Elapsed += timer_Elapsed;
        ThreadPool.QueueUserWorkItem((_) => DoWork());
    ...

    void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
        DoWork();
    }

    void DoWork() {
        // etc...
    }

使用System.Threading.Timer类而不是System.Timers.Timer,因为此类型只是线程计时器的包装器

它也适合你的要求

 System.Threading.Timer timer =
                new System.Threading.Timer(this.DoWork, this, 0, 36000);

是详细信息。

使用System.Timers.Timer的AutoReset属性,并将其值设置为“true”。 不需要使用timer.Start(),因为它执行与timer.Enabled=true相同的任务

timer = new Timer();
timer.Elapsed += timer_Elapsed;
timer.Enabled = true;
timer.Interval = 3600000;
timer.AutoReset = true;

AutoReset=true将设置一个值,指示计时器应在每次经过指定间隔时引发经过的事件。

如果希望立即触发
计时器
,则只需在没有指定间隔的情况下初始化
计时器
对象即可(默认值为100ms,几乎立即为:P),然后将调用函数内的间隔设置为您喜欢的任何值。下面是我在Windows服务中使用的示例:

private static Timer _timer;

protected override void OnStart(string[] args)
{
    _timer = new Timer(); //This will set the default interval
    _timer.AutoReset = false;
    _timer.Elapsed = OnTimer;
    _timer.Start();
}

private void OnTimer(object sender, ElapsedEventArgs args)
{
    //Do some work here
    _timer.Stop();
    _timer.Interval = 3600000; //Set your new interval here
    _timer.Start();
}

如果在timer.Start()之后调用它,会出现任何问题吗?我这样做了,但在这里至少不起作用。它在时间开始之前运行该方法,但在onStart()内部运行。