C#在特定时间执行function

我做了一个小的Windows窗体程序来对磁盘上的一些文件进行一些自动备份。 现在我需要在执行之前按一个按钮,但我想让程序运行,并在凌晨3点运行执行备份的function。

我研究了一下,发现我需要一个计时器,但我没有使用它,所以它在特定的时间执行。

我希望你能帮助我。 🙂

谢谢!

不是100%的欺骗,但你会发现这个问题很有趣。 ;)

包含对quartzTimer和其他选项的引用。

您可以使用Windows中的任务计划程序将程序设置为在特定时间运行。 看看这个链接 。 它指的是内置的Windows备份,但没有理由不能让它运行自己的程序。

实际上,这个到AT命令的链接可能会更好。

我知道你正在寻找一个编程解决方案(还有其他几个人已经发布了如何使用计时器)但是使用AT命令调度某些东西的优点是你的程序不需要一直在系统上运行。 任务计划程序将在正确的时间启动您的程序,它可以执行然后退出。 您可能需要稍微调整一下程序以使其自动备份然后退出,但这应该是可能的。

一种选择是使用计时器。 这要求您的程序继续运行。

如果你想使用计时器然后将其设置为触发(例如,每秒)

myTimer.Interval = 1000; 

在调用的委托函数中,将当前时间与目标时间进行比较,如果匹配,则启动备份过程。

您可以使用: System.Forms.Timer

如果您不知道要执行的时间量,请执行以下操作:

 DateTime TimeToExecuteTask DateTime Now = DateTime.Now // assign values. int SecondsToExectution = (TimeSpan)(TimeToExecuteTask - Now).TotalSeconds; 

很抱歉在这么多年后发布了答案。 我觉得我的post可能会帮助一些人。 这是一个用计时器模拟计划任务的小代码。

 using System; using System.Timers; namespace ScheduleTimer { class Program { static Timer timer; static void Main(string[] args) { schedule_Timer(); Console.ReadLine(); } static void schedule_Timer() { Console.WriteLine("### Timer Started ###"); DateTime nowTime = DateTime.Now; DateTime scheduledTime = new DateTime(nowTime.Year, nowTime.Month, nowTime.Day, 8, 42, 0, 0); //Specify your scheduled time HH,MM,SS [8am and 42 minutes] if (nowTime > scheduledTime) { scheduledTime = scheduledTime.AddDays(1); } double tickTime = (double)(scheduledTime - DateTime.Now).TotalMilliseconds; timer = new Timer(tickTime); timer.Elapsed += new ElapsedEventHandler(timer_Elapsed); timer.Start(); } static void timer_Elapsed(object sender, ElapsedEventArgs e) { Console.WriteLine("### Timer Stopped ### \n"); timer.Stop(); Console.WriteLine("### Scheduled Task Started ### \n\n"); Console.WriteLine("Hello World!!! - Performing scheduled task\n"); Console.WriteLine("### Task Finished ### \n\n"); schedule_Timer(); } } } 

屏幕截图

在此处输入图像描述

  //Perhaps the following is a more suitable solution consume the following public class DailyTrigger { readonly TimeSpan triggerHour; public DailyTrigger(int hour, int minute = 0, int second = 0) { triggerHour = new TimeSpan(hour, minute, second); InitiateAsync(); } async void InitiateAsync() { while (true) { var triggerTime = DateTime.Today + triggerHour - DateTime.Now; if (triggerTime < TimeSpan.Zero) triggerTime = triggerTime.Add(new TimeSpan(24, 0, 0)); await Task.Delay(triggerTime); OnTimeTriggered?.Invoke(); } } public event Action OnTimeTriggered; } // as Follows var trigger = new DailyTrigger(17); // every day at 5:00pm trigger.OnTimeTriggered += () => { //Do Logic };