我有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 :(得分: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);
}
}