我在一个Windows服务中遇到了System.Timers.Timer的问题。我基本上是使用以下代码在一个基础轮询服务类中设置计时器:
_serviceTimer.Elapsed += OnElapsedTime;
_serviceTimer.Interval = ServiceTimerInterval.TotalMilliseconds;
_serviceTimer.AutoReset = false;
_serviceTimer.Enabled = true;
当OnElapsedTime触发时,我想禁用定时器并根据查找结果设置不同的间隔时间。问题在于,当我更改间隔时间时,它实际上会重新启动定时器。这种奇怪的行为在msndn文档中有提到:
注意: 如果Enabled和AutoReset都设置为false,并且之前已启用定时器,则设置Interval属性会导致Elapsed事件被触发一次,就像Enabled属性被设置为true一样。要设置间隔而不触发事件,可以暂时将AutoReset属性设置为true。 Timer.Interval 在onelapsed事件中,我有以下代码:
_serviceTimer.Enabled = false;
double newIntervalSetting = newSetting;
base._serviceTimer.AutoReset = true;
base._serviceTimer.Interval = newIntervalSetting;
base._serviceTimer.AutoReset = false;
//reenable after processing
问题在于,尽管我在更改间隔之前将自动重置设置为true,但时间间隔的更改仍会开始计时器倒计时并最终触发事件。启用始终保持不变,但事件仍然触发。我不确定是否误解了有关正确操作方式的MSDN文档。有人能帮我吗?