我正在编写一个 Windows 服务以每 x 分钟执行一次方法,但我希望该方法相对于计时器本身同步执行。Windows 服务有一个 Timer 对象 (System.Timers.Timer),它每 x 分钟启动并调用某个方法“DoWork”,但计时器必须在“DoWork”执行时“停止”,并在方法完成后再次启动。
我知道使用 System.Windows.Forms.Timer 类会给我想要的行为,但我不想向我的服务项目添加 System.Windows.Forms dll 引用。
这是“工作”代码的示例:
private System.Timers.Timer timer1;
public void MainMethod()
{
timer1 = new System.Timers.Timer();
timer1.Interval = 1000;
timer1.Elapsed += new ElapsedEventHandler(timer1_Elapsed);
timer1.Start();
}
void timer1_Elapsed(object sender, ElapsedEventArgs e)
{
timer1.Stop();
DoWork();
timer1.Start();
}
private void DoWork()
{
Thread.Sleep(2000);
Console.WriteLine("found!");
}
在上面的控制台应用程序中运行(作为编写 Windows 服务之前的模型),预期的行为应该是控制台写“找到!” 每 3 秒。
只是一个旁注:我只是使用 'Thread.Sleep(2000)' 来模拟延迟,但它不会构成实际代码库的一部分。
是否有任何其他/“更好”的方式来实现这一点而不是我上面的方式?
感谢您阅读我的问题,任何输入将不胜感激。