将定时器间隔设置为无限

时间:2010-10-11 11:38:43

标签: .net .net-2.0 timer

我有一个方法将 BO Connection.AliveInterval链接到System.Timers.Timer(.NET 2 )。

管理某些连接始终连接。

在这种情况下设置是否可以

if (myConnection.AliveInterval == Connection.TimeInfinite)
{
    myTimer.Interval = double.PositiveInfinity;
}

我是否应该期望Timer会抛出异常或者经历Elapsed事件?

3 个答案:

答案 0 :(得分:7)

也许你指的是在使用System.Timers.Timer的构造函数时,我在MonoDevelop和VS的黄色工具提示中得到的有些误导性信息:

  

将值设置为 Infinite 毫秒以禁用定期信令。

您可以获得类型为Int32UInt32TimeSpan的参数的此信息。有些令人惊讶的是,这些类型不提供名为Infinite的属性。

您想使用Timeout.Infinite来获得所需的结果。

请注意,在线引用会正确描述:

  

指定 Timeout.Infinite 以防止计时器启动。

编辑:我刚刚意识到这不适用于setter,只适用于计时器的构造函数。所以你最好的选择可能是使用myTimer.Stop(),正如@spender或myTimer.Enabled = false所建议的那样@Bolu评论。

答案 1 :(得分:0)

为什么不myTimer.Stop()

答案 2 :(得分:0)

MSDN

  

该值必须大于零,   小于或等于   Int32.MaxValue

     

将抛出ArgumentException,   当间隔大于   计时器是Int32.MaxValue,   目前启用。如果计时器是   目前尚未启用,没有例外   抛出直到它变为启用状态。

因此,如果将启用simer,PositiveInfinity将抛出异常。

现在,解决方案是禁用计时器并将值设置为PositiveInfinity。启用计时器时,捕获ArgumentException并将间隔设置为PositiveInfinity