随机间隔时间后调用方法
本文关键字:调用 方法 时间 随机 | 更新日期: 2023-09-27 18:06:39
我有5个方法,我需要在随机间隔(1到3秒)的时间后调用它们。假设第一个方法在1秒后被调用,第二个方法在2.3秒后被调用,下一个方法在1.5秒后被调用,等等。我使用timer
完成了以下操作 Random rand = new Random();
fortimerinterval1 = rand.Next(1000, 3000);
mytimer1.Interval = fortimerinterval1;
mytimer1.Enabled = true;
mytimer1.Start();
但问题是,定时器间隔并不是每次都改变。计时器间隔在第一次后保持不变。如何使其随机,使每次定时器间隔变化。
像这样做
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);
}
在timer elapsed方法中设置时间间隔
Random rand = new Random();
private void OnTick(object sender, EventArgs eventArgs)
{
_timer.Interval = rand.Next(1000, 3000);
}
如果您使用system . timer . timer,请注意重叠的回调。例如,如果第一个tick在1秒后触发,并且您在tick回调中调用的方法需要超过1秒才能完成,那么在第一个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);
}
}