只有顺序中的最后一个触发器正在执行其工作 C#

Only last trigger in sequence is doing its job C#

我的情况是这样的:

    public Pocetna_forma()
    {

        InitializeComponent();
        Timer_reset(new TimeSpan(19, 09, 00));
        Timer_bolovanje(new TimeSpan(19, 09, 10));
        Timer_godisnji(new TimeSpan(19, 09, 20));          
        Timer_godisnji_insert(new TimeSpan(19, 09, 30));
        Timer_bolovanje_insert(new TimeSpan(19, 09, 40));
    }

所以我将触发器的起始条件放在我的主窗体构造函数中,每个触发器都是相同的,除了它运行的方法(基本上它们都是相同的,但查询不同)。这就是我的触发器+方法的样子:

    private void Timer_reset(TimeSpan alertTime)
    {
        DateTime current = DateTime.Now;
        TimeSpan timeToGo = alertTime - current.TimeOfDay;
        if (timeToGo < TimeSpan.Zero)
        {
            return;//time already passed
        }
        this.timer = new System.Threading.Timer(x =>
        {
            this.Trigger_brisanje();
        }, null, timeToGo, Timeout.InfiniteTimeSpan);
    }

    private void Trigger_brisanje()
    {
        NpgsqlConnection conn = new NpgsqlConnection(Connectionstring);
        conn.Open();

        NpgsqlCommand upis_odlaska = new NpgsqlCommand("begin;update zaposlenici set polje_stanje=1,vrijeme3=null,vrijeme2=null;commit;", conn);
        upis_odlaska.ExecuteReader();

        conn.Close();
    }

然后我尝试将调用触发器方法一个接一个地移动,发现如果我为 ex 放置。 "Timer_godisnji_insert"在"Timer_bolovanje_insert"之后,只有"Timer_godisnji_insert"才会开始。我是触发器的新手,所以我不知道错误在哪里,有人吗?

您正在将每个计时器分配给同一个字段。为每个计时器使用一个字段,或者将所有计时器放在一个列表中,并在添加或删除计时器时使用锁来保持列表同步。