随机间隔时间后的呼叫方法

时间:2013-03-31 22:42:10

标签: c#

我有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();

但问题是,定时器间隔不会每次都改变。定时器间隔在第一次后保持不变。如何让它随机,以便每次定时器间隔改变。

3 个答案:

答案 0 :(得分:5)

做这样的事情

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);
}

答案 1 :(得分:4)

在计时器经过的方法中设置间隔。

    Random rand = new Random();

    private void OnTick(object sender, EventArgs eventArgs)
    {

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

答案 2 :(得分:1)

如果使用System.Timers.Timer,请注意重叠的回调。例如,如果第一个刻度线在1秒后触发,并且您在刻度线回调中调用的方法需要超过1秒才能完成,那么您最终会在第一个刻度线回调后的第一个刻度回调被称为1秒改变间隔。

我会使用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);
        }
    }