只有顺序中的最后一个触发器正在执行其工作 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"才会开始。我是触发器的新手,所以我不知道错误在哪里,有人吗?
您正在将每个计时器分配给同一个字段。为每个计时器使用一个字段,或者将所有计时器放在一个列表中,并在添加或删除计时器时使用锁来保持列表同步。
我的情况是这样的:
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"才会开始。我是触发器的新手,所以我不知道错误在哪里,有人吗?
您正在将每个计时器分配给同一个字段。为每个计时器使用一个字段,或者将所有计时器放在一个列表中,并在添加或删除计时器时使用锁来保持列表同步。