看了这篇文章https://blog.csdn.net/zhouyingge1104/article/details/94211503
//设定定时执行
setTaskAtFixedTime();
private void setTaskAtFixedTime()
{
DateTime now = DateTime.Now;
DateTime oneOClock = DateTime.Today.AddHours(1.0); //凌晨1:00
if (now > oneOClock)
{
oneOClock = oneOClock.AddDays(1.0);
}
int msUntilFour = (int)((oneOClock - now).TotalMilliseconds);
var t = new System.Threading.Timer(doAt1AM);
t.Change(msUntilFour, Timeout.Infinite);
}
//要执行的任务
private void doAt1AM(object state)
{
//执行功能...
//再次设定
setTaskAtFixedTime();
}
本人把代码重写了一下:
/// <summary>
///
/// </summary>
/// <param name="action">执行的具体任务</param>
/// <param name="fixedDateTime">执行的开始时间</param>
private void setTaskAtFixedTime(Action action,DateTime fixedDateTime)
{
DateTime now = DateTime.Now;
if (now > fixedDateTime)
{
fixedDateTime = fixedDateTime.AddDays(1.0);
}
int msUntilFour = (int)((fixedDateTime - now).TotalMilliseconds);
var t = new System.Threading.Timer(p =>
{
//执行任务
action.Invoke();
//再次设定
setTaskAtFixedTime(action,fixedDateTime);
});
t.Change(msUntilFour, System.Threading.Timeout.Infinite);
}