随机间隔时间后调用方法

本文关键字:调用 方法 时间 随机 | 更新日期: 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);
        }
    }