2013-03-03 59 views
4

我用這個方法來調用另一個方法每60秒:執行的方法只有

Timer updateTimer = new Timer(testt, null, 
           new TimeSpan(0, 0, 0, 0, 1), new TimeSpan(0, 0, 60)); 

是可能的1毫秒的延遲之後只有一次調用此方法?

+0

您總是可以將第二個TimeSpan設置爲null。不是一個理想的解決方案,但它會工作。 – ChrisF 2013-03-03 12:30:50

+0

您可以使用發件人對象在被調用的方法上停止計時器 – Tearsdontfalls 2013-03-03 12:32:04

回答

18

假設這是一個System.Threading.Timer,從爲constructor的最後一個參數的文件:

period
The time interval between invocations of the methods referenced by callback. Specify negative one (-1) milliseconds to disable periodic signaling.

所以:

Timer updateTimer = new Timer(testt, null, 
           TimeSpan.FromMilliseconds(1), // Delay by 1ms 
           TimeSpan.FromMilliseconds(-1)); // Never repeat 

是真正有用的,雖然1毫秒的延遲?爲什麼不立即執行它?如果你真的只是試圖在線程池線程上執行它,那麼有更好的方法來實現它。

+0

錯誤:跨線程操作無效:從其創建線程以外的線程訪問控件'label8'。 - 當試圖在窗體上顯示某些內容時。 – TomeeNS 2015-08-10 21:48:12

+1

@TomeeNS:我懷疑你正在使用那種錯誤的Timer。 – 2015-08-10 21:48:51

3
System.Timers.Timer aTimer = new System.Timers.Timer(10000); 
// Hook up the Elapsed event for the timer. 
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); 
// Set the Interval to 60 seconds (60000 milliseconds). 
aTimer.Interval = 60000; 
//for enabling for disabling the timer. 
aTimer.Enabled = true; 
private void OnTimedEvent(object source, ElapsedEventArgs e) 
{ 
    //disable the timer 
    aTimer.Enabled = false; 
    Console.WriteLine("The Elapsed event was raised at {0}", e.SignalTime); 
}