我的情况是这样的:
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();
}
然后我试图将触发方法一个接一个地移动,并发现如果我放在前面。 “Timer_bolovanje_insert”之后的“Timer_godisnji_insert”,只有“Timer_godisnji_insert”才会启动。我是触发器的新手,所以我不知道bug在哪里,有人吗?
答案 0 :(得分:2)
您将每个计时器分配到同一个字段。为每个计时器使用一个字段或将所有计时器放在列表中并使用锁定以在添加或删除计时器时保持列表同步。