当应用程序立即启动时,是否有方法ExecuteEvery5Min得到执行,然后每5分钟通过计时器执行一次?

时间:2019-04-22 08:57:45

标签: c#

我正在使用Timer每5分钟调用一段代码ExecuteEvery5Min

现在,我启动控制台应用程序,必须等待5分钟,然后执行代码ExecuteEvery5Min,然后每5分钟执行一次。...

有没有办法在应用程序启动后立即执行代码ExecuteEvery5Min,然后每5分钟通过计时器?

using (UtilityClass utilityClass = new UtilityClass()) // To dispose after the use
        {
            while (true) { }
        }


public class UtilityClass : IDisposable
{
    private readonly System.Timers.Timer _Timer;

    public UtilityClass()
    {
        _Timer = new System.Timers.Timer(TimeSpan.FromMinutes(5).TotalMilliseconds)
        {
            Enabled = true
        };

        _Timer.Elapsed += (sender, eventArgs) =>
        {
            ExecuteEvery5Min();
        };
    }

    private void ExecuteEvery5Min()
    {
        Console.WriteLine($"Every 5 minute at {DateTime.Now}");
    }

    public void Dispose()
    {
        _Timer.Dispose();
    }
}

2 个答案:

答案 0 :(得分:3)

为什么不简单地在计时器顶部调用构造函数中的代码(立即得到)?

    _Timer = new System.Timers.Timer(TimeSpan.FromMinutes(5).TotalMilliseconds)
    {
        Enabled = true
    };

    // add this
    ExecuteEvery5Min();

    _Timer.Elapsed += (sender, eventArgs) =>
    {
        ExecuteEvery5Min();
    };

答案 1 :(得分:1)

如果可以的话,可以改用System.Threading.Timer,它具有以下构造函数:

public Timer (System.Threading.TimerCallback callback, object state, int dueTime, int period);

从以下链接引用:

  

dueTime Int32调用回调之前要延迟的时间,   以毫秒为单位。指定Infinite以防止计时器启动。   指定零(0)可立即启动计时器。

     

期间 Int32两次调用之间的时间间隔,以   毫秒。指定Infinite以禁用定期信令。

PS:它是基于回调的,而不是像现在使用的基于事件的事件。

请参阅:https://docs.microsoft.com/en-us/dotnet/api/system.threading.timer.-ctor?view=netframework-4.8