System.Timers.Timer不会正确引发事件

时间:2014-04-05 05:18:33

标签: c# .net winforms timer

我希望在某些行动(做某事)之间有一些延迟;存储在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的第二行行))。

enter image description here

0 个答案:

没有答案