我有一个我在Windows Azure中托管的WCF服务。我在这个服务器上使用一个Timer,服务器需要每10秒更新一次。服务器在ASP应用程序和WPF应用程序中实现。
当我在构造函数中初始化Timer时,如下所示:
public Service1()
{
System.Timers.Timer timer = new System.Timers.Timer();
timer.Elapsed += new System.Timers.ElapsedEventHandler(WCFService_Elapsed);
timer.Interval = 10000;
timer.Enabled = true;
timer.Start();
}
计时器将启动,但如果我重新启动应用程序,计时器将运行得更快(因为它运行的是计时器的副本)。在contructor上面声明计时器,因为私有属性不起作用。
我已经尝试在ServiceBase类的OnStart方法中使用它:
private System.Timers.Timer timer;
protected override void OnStart(string[] args)
{
timer = new System.Timers.Timer();
timer.Elapsed += new System.Timers.ElapsedEventHandler(WCFService_Elapsed);
timer.Interval = 10000;
timer.Enabled = true;
timer.Start();
}
但是这从未被调用过......我也测试了一个静态计时器,但这也没有开始。
我做错了什么?
答案 0 :(得分:0)
Timer继承IDisposable,这意味着可以并且应该处理Timer。
我很惊讶在关闭您的服务时计时器仍在运行,但您应该在停止服务时处理以解决问题。
因此,在您的OnStop方法中,您应该致电:
timer.Stop();
timer.Dispose();