如果时间是凌晨1:00,用c#运行函数
本文关键字:运行 函数 时间 如果 | 更新日期: 2023-09-27 18:03:10
在c#中是否有一种方法,如果PC或系统中的时间说1:00AM,该函数将运行。我知道这可以实现使用定时器,但我怎么能做到呢?我现在正在修改的代码是:
var t = new Timer { Enabled = true, Interval = 1 * 1000 };
t.Tick += delegate { mem_details(); };
但是这段代码每1秒运行一次函数,我需要计算1:00AM到秒吗?所以我可以使用这段代码?
请看看Quartz调度器,我想它会有所帮助http://quartz-scheduler.org/
下面是一个如何使用cron字符串为不同时间配置Quartz的示例:http://quartz-scheduler.org/documentation/quartz-2.2.x/examples/Example3.
你可以使用在线的cron生成器来选择你需要的时间
你可以用微软的响应式框架来做这些。其中的调度程序非常健壮。
你可以这样写:
var start = DateTimeOffset.Now;
start = start.Date.AddHours(start.Hour == 0 ? 1.0 : 25.0);
/* start is now set for the next 1AM */
/* So schedule it */
Scheduler.Default.Schedule(start, reschedule =>
{
/* Do you thing as it's now 1AM */
/* And now reschedule to run tomorrow at 1AM */
reschedule(DateTimeOffset.Now.Date.AddHours(25.0));
});
既然你使用的是1秒计时器,为什么不检查时间每滴答?
编辑:好的,我稍微改变了一下我的代码。它仍然是一个1秒计时器(1000毫秒),但现在当计时器滴答事件触发时,它只看当前的小时和分钟。因此,如果您的程序运行得有点慢,它仍然会在凌晨1点运行您的进程。
全局变量"lastundate"存储最后一个进程运行的日期。这个需要在你的进程运行之前更新,以防你的进程需要超过一秒的时间来完成。
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private String lastRunDate = "";
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
timer1.Interval = 1000;
timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
if (lastRunDate != System.DateTime.Now.ToString("yyyy-MM-dd"))
{
String str = System.DateTime.Now.ToString("h:mm tt");
if (str.Equals("1:00 AM"))
{
lastRunDate = System.DateTime.Now.ToString("yyyy-MM-dd");
MessageBox.Show(str);
}
}
}
}
}
您可以使用计时器并在其中检查时间。例如
var t = new Timer { Enabled = true, Interval = 1 * 1000 };
t.Tick += delegate (object sender, EventArgs e)
{
if (DateTime.Now.TimeOfDay.TotalHours > 1 && DateTime.Now.TimeOfDay.TotalHours < 2)
{
mem_details();
(sender as Timer).Enabled=false;
}
};