2010-10-11 68 views
3

我有一個BOConnection.AliveInterval鏈接到System.Timers.Timer(.NET )的方法。設置計時器時間間隔爲無限

某些連接管理爲始終連接。

是否確定在這種情況下

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

設置?

我是否應該期待計時器會拋出異常或上升Elapsed事件?

+0

@Oded:建立連接後,計算連接時間。 – serhio 2010-10-11 11:46:48

+0

那麼,看看連接是否超時? – Oded 2010-10-11 11:47:33

+0

@serhio:我想你最好道歉... – Aliostad 2010-10-11 11:58:04

回答

0

MSDN

該值必須大於零, 和小於或等於 Int32.MaxValue

ArgumentException將被拋出, 當間隔大於 的Int32 .MaxValue,定時器當前已啓用 。如果定時器 當前未啓用,則不會拋出異常 ,直至啓用。

因此,PositiveInfinity會拋出一個異常,如果simer將被啓用。

現在,解決方案是禁用定時器並將值設置爲PositiveInfinity。當啓用定時器時,捕獲ArgumentException並將間隔設置爲PositiveInfinity

0

爲什麼不是myTimer.Stop()

+0

因爲這不是一個動作,而是一個初始化。我沒有開始() – serhio 2010-10-11 11:41:37

+1

'myTimer.Enabled = false'? – Bolu 2010-10-11 11:50:52

+0

Downvote看起來有點嚴峻。 – spender 2010-10-11 11:51:44

7

也許你指的是一些誤導信息使用System.Timers.Timer的構造函數,當我在MonoDevelop中和VS黃色提示得到:

的值設置爲無限毫秒禁用定期信令。

你得到這個信息與類型Int32UInt32TimeSpan的參數。有點令人驚訝的是,這些類型不提供名爲Infinite的屬性。

您想使用Timeout.Infinite以獲得所需的結果。

注意,在線參考discribes它正確:

指定Timeout.Infinite防止定時器啓動。

編輯:我剛剛意識到這不會對二傳手的工作,只爲定時器的構造函數。因此,您最好的選擇可能是使用myTimer.Stop(),正如@spender或myTimer.Enabled = false所建議的那樣,由@Bolu評論。