Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用每天在指定时间运行的函数_C#_Timer - Fatal编程技术网

C# 调用每天在指定时间运行的函数

C# 调用每天在指定时间运行的函数,c#,timer,C#,Timer,看看我的代码: Timer myTimer = new Timer { Interval = 1000 }; public void button_Click(object sender, EventArgs e) { myTimer.Tick += new EventHandler(OnTick); myTimer.Start(); } public void OnTick(object sender, EventArgs ea) { myTimer.Stop();

看看我的代码:

Timer myTimer = new Timer { Interval = 1000 };
public void button_Click(object sender, EventArgs e)
{
    myTimer.Tick += new EventHandler(OnTick);
    myTimer.Start();
}
public void OnTick(object sender, EventArgs ea)
{
    myTimer.Stop();
    Execute();
}

我想要函数
Execute()
每天在指定时间运行,例如:1h:5min、1h:25min、2h10min…。我使用
计时器
,但我只能使函数每隔
时间间隔运行一次。如何为计时器指定绝对时间?

您可以使用Quartz.net scheduler创建时间表:

您可以使用Quartz.net调度程序创建调度:

不能为任何内置计时器类指定绝对时间。您必须手动计算时间间隔

其他可能适合您的解决方案:

  • 使用类似于
  • 使用windows计划的任务

不能为任何内置计时器类指定绝对时间。您必须手动计算时间间隔

其他可能适合您的解决方案:

  • 使用类似于
  • 使用windows计划的任务

您可以计算当前时间与应用程序启动时
计时器应运行的时间之间经过的毫秒数。设置计时器的
间隔的毫秒数

例如:

TimeSpan ts = <datetime when timer should fire> - DateTime.Now;

myTimer.Tick += new EventHandler(OnTick);
myTimer.Interval = ts.TotalMilliseconds;
myTimer.Start();
TimeSpan ts=-DateTime.Now;
myTimer.Tick+=neweventhandler(OnTick);
myTimer.Interval=ts.total毫秒;
myTimer.Start();
计时器启动后,使用上面的行再次设置间隔,以确保它在第二天的指定时间再次启动


当然,这假定应用程序确实在您希望启动计时器的时间运行。

您可以计算当前时间与应用程序启动时计时器应运行的时间之间的毫秒数。设置计时器的
间隔的毫秒数

例如:

TimeSpan ts = <datetime when timer should fire> - DateTime.Now;

myTimer.Tick += new EventHandler(OnTick);
myTimer.Interval = ts.TotalMilliseconds;
myTimer.Start();
TimeSpan ts=-DateTime.Now;
myTimer.Tick+=neweventhandler(OnTick);
myTimer.Interval=ts.total毫秒;
myTimer.Start();
计时器启动后,使用上面的行再次设置间隔,以确保它在第二天的指定时间再次启动


当然,这是假设应用程序确实在您希望定时启动的时间运行。

假设应用程序将一直运行,您可以编写某种类型的
AlarmClock
类,该类维护代理列表以及调用它们的时间。在内部,计时器将定期启动,检查是否到了调用任何代理的时间。这可能对您有所帮助。我建议使用Windows计划任务。你还打算如何确保你的应用程序在那时运行?假设你的应用程序将一直运行,你可以编写某种类型的
AlarmClock
类,该类维护代理列表以及调用它们的时间。在内部,计时器将定期启动,检查是否到了调用任何代理的时间。这可能对您有所帮助。我建议使用Windows计划任务。你还打算如何确保你的应用程序在那个时候运行?