我正在使用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();
}
}
答案 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