定时器/触发器仅工作一天C#

定时器/触发器仅工作一天C#,c#,timer,triggers,method-chaining,C#,Timer,Triggers,Method Chaining,我制作了一个计时器函数,如下所示: public Pocetna_forma() { InitializeComponent(); Timer_reset(new TimeSpan(11, 37, 00)); } private void Timer_reset(TimeSpan alertTime) { DateTime current = DateTime.Now; TimeSpan timeToG

我制作了一个计时器函数,如下所示:

 public Pocetna_forma()
    {
        InitializeComponent();
        Timer_reset(new TimeSpan(11, 37, 00));
    }

 private void Timer_reset(TimeSpan alertTime)
    {
        DateTime current = DateTime.Now;
        TimeSpan timeToGo = alertTime - current.TimeOfDay;
        if (timeToGo < TimeSpan.Zero)
        {
            return;//time already passed
        }
        this.reset = 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();
    }
public Pocetna_forma()
{
初始化组件();
定时器_重置(新的时间跨度(11,37,00));
}
专用无效计时器\u重置(TimeSpan alertTime)
{
DateTime current=DateTime.Now;
TimeSpan timeToGo=alertTime-current.TimeOfDay;
if(timeToGo
{
这个。触发器_brisanje();
},null,timeToGo,Timeout.InfiniteTimeSpan);
}
私有无效触发器_brisanje()
{
NpgsqlConnection conn=新的NpgsqlConnection(Connectionstring);
conn.Open();
NpgsqlCommand upis_odlaska=新的NpgsqlCommand(“开始;更新zaposlenici set polje_stanje=1,vrijeme3=null,vrijeme2=null;提交;”,conn);
upis_odlaska.ExecuteReader();
康涅狄格州关闭();
}

我注意到我的触发器只在启动应用程序后一天运行,并且该应用程序在服务器上全天候运行,因此它永远不会关闭。我需要它在一周中的每一天运行,一些想法是这样做的关键是什么?

您为计时器构造函数提供的最后一个参数是Timeout.InfiniteTimeSpan-但是检查参数是:

public Timer(
  TimerCallback callback,
  object state,
  TimeSpan dueTime,
  TimeSpan period
) 
i、 最后一个参数应该是重复周期。 因为您提供了一个无限周期,计时器将不会再次触发


如果这是每日设置,则应该类似于TimeSpan.FromHours(24.0)。

为计时器构造函数提供的最后一个参数是Timeout.InfiniteTimeSpan-但是检查参数是:

public Timer(
  TimerCallback callback,
  object state,
  TimeSpan dueTime,
  TimeSpan period
) 
i、 最后一个参数应该是重复周期。 因为您提供了一个无限周期,计时器将不会再次触发


如果这是每日的,那么它应该类似于TimeSpan.FromHours(24.0)。

您可以使用以下代码段而不是计时器:

 public static async Task FireTrigger(int hours, int minutes, int seconds)
    {
        do
        {
            if (DateTime.Now.Hour == hours && DateTime.Now.Minute == minutes && DateTime.Now.Second == seconds)
            {
                // Call trigger!

            }
            await Task.Delay(990);
        }
        while (true);
    } 
你可以这样称呼它:

 Task.Run(async () => await FireTrigger(hours, minutes, seconds)); 

这是一个异步任务。它不会阻止其他代码,每秒只运行1次,但每次都会运行。

您可以使用以下代码段而不是计时器:

 public static async Task FireTrigger(int hours, int minutes, int seconds)
    {
        do
        {
            if (DateTime.Now.Hour == hours && DateTime.Now.Minute == minutes && DateTime.Now.Second == seconds)
            {
                // Call trigger!

            }
            await Task.Delay(990);
        }
        while (true);
    } 
你可以这样称呼它:

 Task.Run(async () => await FireTrigger(hours, minutes, seconds)); 

这是一个异步任务。它不会阻塞其他代码,每秒只运行1次,但每次都会运行。

似乎作为计划任务可以更好地完成此任务。似乎作为计划任务可以更好地完成此任务。