运行 计时器立即在 windows 服务中

Running timer immediately in a windows service

我在 VS.net C#

上创建了一个 windows 服务

在 OnStart 事件中我启动了一个计时器。

在计时器中,我调用了一个名为 DO()

的函数

DO()函数的过程很长(需要一个多小时)

流程应该是这样的

开始然后立即调用时间但由于定时器间隔需要再等一天

protected override void OnStart(string[] args)
{
    eventLog1.WriteEntry("In OnStart.");

    try
    {
        Timer timer = new Timer();
        timer.Interval = 1000 * 60 *60 * 24;
        timer.Elapsed += new ElapsedEventHandler(this.OnTimer);
        timer.Start();
        DO();
    }
    catch (Exception ex)
    {
        eventLog1.WriteEntry("ERROR (OnStart) : " + ex.ToString());

    }
}

    public void OnTimer(object sender, ElapsedEventArgs args)
    {
        DO();
    }

    private void DO()
    {
     // Some process takes an hour
    }

服务启动后,它会在“正在启动”中停留一个小时

有没有一种方法可以在服务启动后立即启动我的服务 DO() 函数,而不是从 OnStart 事件开始?

假设您的示例没有遗漏任何内容,您的计时器已用方法将 运行 ThreadPool

所以我会在 OnStart

中更改这一行
DO();

...这一行:

ThreadPool.QueueUserWorkItem(x => Do());

它与计时器立即触发的效果相同,更重要的是,不会阻塞该行。