2013-03-31 58 views
2

我有5種方法,我需要在隨機間隔(1到3秒)後調用它們。說1秒,那麼第二種方法是2.3秒,在下一個方法後1.5後等稱爲後我並用定時器隨機時間間隔後的調用方法

Random rand = new Random(); 
    fortimerinterval1 = rand.Next(1000, 3000); 
    mytimer1.Interval = fortimerinterval1; 
    mytimer1.Enabled = true; 
    mytimer1.Start(); 

以下但問題是第一種方法被調用時,定時器間隔不改變每次。定時器間隔在第一次後保持不變。如何使它隨機,以便每次計時器間隔更改。

+0

使用一個定時器以固定的間隔,比方說,100毫秒,並使用隨機函數 – I4V

回答

4

做這樣的事情

Random rand = new Random(); 
Timer mytimer = new Timer(); 

private void button1_Click(object sender, EventArgs e) 
{ 
    mytimer.Tick += new EventHandler(TimerEventProcessor); 
    int fortimerinterval = rand.Next(1000, 3000); 
    mytimer.Interval = fortimerinterval; 
    mytimer.Enabled = true; 
    mytimer.Start(); 
} 

public void TimerEventProcessor(Object myObject, EventArgs myEventArgs) 
{ 
    int fortimerinterval = rand.Next(1000, 3000); 
    mytimer.Interval = fortimerinterval; 

    System.Diagnostics.Debug.WriteLine(DateTime.Now); 
} 
4

設置定時器已用方法的時間間隔。

Random rand = new Random(); 

    private void OnTick(object sender, EventArgs eventArgs) 
    { 

     _timer.Interval = rand.Next(1000, 3000); 
    } 
+0

可以打電話給你的方法,它你請給我更多的細節?當我使用你的代碼時,它顯示_timer不存在。然後我使用mytimer1,但它不影響代碼。 – asdfkjasdfjk

1

如果使用System.Timers.Timer,注意重疊的回調。例如,如果第一個tick在1秒後觸發,並且您在tick回調中調用的方法需要超過1秒才能完成,那麼在更改第一個tick後,您將最終在第一個tick之後1秒調用另一個tick回調。間隔。

我會使用一個System.Threading.Timer配置爲觸發一次,並在回調方法中將其更改爲在下一個隨機時間間隔再次觸發。

像這樣:

public TestClass() 
    { 
     _random = new Random(Environment.TickCount); 
     _timer = new Timer(TimerCallback, null, _random.Next(1000, 3000), Timeout.Infinite); 
    } 

    private void TimerCallback(object state) 
    { 
     try 
     { 
      // Do something. 
     } 
     finally 
     { 
      _timer.Change(_random.Next(1000, 3000), Timeout.Infinite); 
     } 
    } 
相關問題