我有一个方法将 BO Connection.AliveInterval
链接到System.Timers.Timer
(.NET 2 )。
管理某些连接始终连接。
在这种情况下设置是否可以
if (myConnection.AliveInterval == Connection.TimeInfinite)
{
myTimer.Interval = double.PositiveInfinity;
}
我是否应该期望Timer会抛出异常或者经历Elapsed事件?
答案 0 :(得分:7)
也许你指的是在使用System.Timers.Timer
的构造函数时,我在MonoDevelop和VS的黄色工具提示中得到的有些误导性信息:
将值设置为 Infinite 毫秒以禁用定期信令。
您可以获得类型为Int32
,UInt32
或TimeSpan
的参数的此信息。有些令人惊讶的是,这些类型不提供名为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
。