我做了一个小的Windows Forms程序来自动备份磁盘上的一些文件。目前我需要在执行之前按一个按钮,但我想让程序在运行时,在凌晨3点运行执行备份的功能。
我进行了一些研究,发现我需要使用计时器,但我无法让它在特定时间执行。
希望你能帮助我。 :-)
谢谢!
我进行了一些研究,发现我需要使用计时器,但我无法让它在特定时间执行。
希望你能帮助我。 :-)
谢谢!
DateTime TimeToExecuteTask
DateTime Now = DateTime.Now // assign values.
int SecondsToExectution = (TimeSpan)(TimeToExecuteTask - Now).TotalSeconds;
一种选择是使用计时器。这需要你的程序一直运行。
如果你想使用计时器,那么将其设置为触发(例如每秒触发一次)。
myTimer.Interval = 1000;
很抱歉这么多年后才回答。我觉得我的帖子可能会在以后帮助到某些人。这里是一个小代码,用于模拟定时任务。
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
};