我希望在某些行动(做某事)之间有一些延迟;存储在DB中的操作和延迟将按订单执行。对于DB中的每个项目,如果是动作(ItemType==1
),它将被执行,如果是延迟,它会计算事件加注的时间和事件发生的时间,再次使用schedule()
方法,下一个项目将继续进行。
private int orderId=0;
private List<Timer> activeTimers=new List<Timer>();
public void schedule()
{
var seqItem = seq.SequenceItem.OrderBy(i => i.OrderId).First(o => o.OrderId > orderId);
orderId = seqItem.OrderId;
if (seqItem.ItemType == 1)
{
var action = seqItem.Action;
DeviceFile.switchDev(action.Device.Name, action.FinalState);//do action
schedule();
}
else if (seqItem.ItemType == 4)//item is delay
delay(seqItem.Delay);
}
private void delay(Delay delay)
{
var timer = new Timer(delay.Duration.TotalMilliseconds);
timer.AutoReset = false;
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.Start();
activeTimers.Add(timer);
}
private void timer_Elapsed(object sender, ElapsedEventArgs e)
{
activeTimers.Remove((Timer)sender);
((Timer)sender).Dispose();
schedule();
}
当我使用操作,延迟,操作的有序项测试这些代码时,不会发生异常,但第三个操作不会执行(执行代码直到var action=...
但是DeviceFile.switchDev
行不执行!(在调试中,如下图所示,继续断点,它显示我的主要表单,不执行if
=&gt; {{1的第二行行))。