2013-03-31 57 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); 
     } 
    } 
相关问题