Timer/trigger 仅适用一天 C#
Timer/trigger works only for one day C#
我制作了一个定时器函数,如下所示:
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();
}
我注意到我的触发器 运行 在我启动该应用程序后仅一天,并且该应用程序在服务器上 运行ning 24/7,因此它永远不会关闭。我一周中的每一天都需要它 运行,一些想法,这样做有什么好处?
您为 Timer 构造函数提供的最后一个参数是 Timeout.InfiniteTimeSpan - 但是检查 documentation 参数是:
public Timer(
TimerCallback callback,
object state,
TimeSpan dueTime,
TimeSpan period
)
即最后一个参数应该是重复周期。
因为您提供了无限期,计时器将永远不会再次触发。
如果这是每天,它应该类似于 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 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();
}
我注意到我的触发器 运行 在我启动该应用程序后仅一天,并且该应用程序在服务器上 运行ning 24/7,因此它永远不会关闭。我一周中的每一天都需要它 运行,一些想法,这样做有什么好处?
您为 Timer 构造函数提供的最后一个参数是 Timeout.InfiniteTimeSpan - 但是检查 documentation 参数是:
public Timer(
TimerCallback callback,
object state,
TimeSpan dueTime,
TimeSpan period
)
即最后一个参数应该是重复周期。 因为您提供了无限期,计时器将永远不会再次触发。
如果这是每天,它应该类似于 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 次,但它每次都会运行。