2012-11-04 21 views
2

我使用System.Threading.Timer對象,我設置其週期:如何獲得System.Threading.Timer期

// period of 1 second 
var timer = new Timer(CallBack, null, 0, 1000); 

... 

現在,我想我的定時器的時段,我該怎麼辦?

+0

如果你解釋爲什麼你想這樣做,也許社區可以建議替代解決方案 – Patrick

回答

3

有沒有支持的方式來做到這一點。您有兩種選擇:

1)最好使用System.Timers.Timer類,因爲它更靈活,並且在使用多線程的情況下更安全。如果您想了解更多關於定時器和System.Windows.Forms.TimerSystem.Timers.TimerSystem.Threading.Timer之間的比較,請閱讀MSDN article about this subject.

2)使用反射來訪問私有成員持有的週期值。關於如何做到這一點,有大量nice articles,您可以使用ILSpy來查看您需要閱讀哪個字段。 (它是.NET 4.0中的timer.m_timer.m_timer.m_period,在其他版本中也可能相同)

1

你不知道。也就是說System.Threading.Timer不支持獲取期限(或者據我所知,任何其他成員)。大致確定時間段的唯一方法是自己計時。

0

根據MSDN沒有辦法達到你所要求的。

+0

是否有合理的原因? – Nick

+0

@Nick只是MS確實以這種方式實現了這個類...沒有其他原因恕我直言。 – Yahia

0

您不能使用System.Threading.Timer,但如果您使用System.Timers.TimerSystem.Windows.Forms.Timer,那麼您可以檢查屬性Timer.Interval。您可以進一步參考此link以查看這兩個實現的差異。