2017-04-12 66 views
0

我的情况是这样的:序列只有最后的触发做它的工作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(); 
    } 

然后我试图移动呼叫触发方法一个接一个,结果发现,如果我把为前。 “Timer_godisnji_insert”“Timer_bolovanje_insert”后,只有“Timer_godisnji_insert”揭开序幕。新的触发器,所以我不知道错误在哪里,任何人?

+2

您使用的每个方法的'timer'成员?如果是这样,您需要为每种方法使用单独的命名计时器成员。所以,'Timer_reset'用于'Timer_reset','timer_bolovanje'用于'Timer_bolovanje'等...你目前正在做的是重置每个函数中的'timer'字段... – GreatAndPowerfulOz

回答

2

要指定每个定时器与同一领域。为每个计时器使用一个字段或将所有计时器放入列表中,并在添加或删除计时器时使用锁定来保持列表同步。

+1

修正了它,这是一个愚蠢的问题,IDK的我怎么错过了...感谢眼看 –

+0

去过那里,这样做。在某个时候,您会看到其他人写的大量代码。 –