项目中有个需求缓存垃圾清理,不想用timer一直刷新读取判断是否执行,我想要在每天定时执行一次任务。
自己在网上查了多种方法,选择了其中一个比较简单的,亲测有效,下面是实现代码:
public class CollectHelper
{
static CollectHelper() { }
private CollectHelper() { }
static readonly CollectHelper instance = new CollectHelper();
public static CollectHelper Instance
{
get
{
return instance;
}
}
/// <summary>
/// 删除文件
/// </summary>
void DeleteExpireFile()
{
string Path = "logs\\";
int HoldDay = 60;//保存60天
if (!Directory.Exists(Path))
return;
TimeSpan KeepDay = new TimeSpan(HoldDay, 0, 0, 0);
DateTime JudgeDate = DateTime.Now.Subtract(KeepDay);
DirectoryInfo mydir = new System.IO.DirectoryInfo(Path);
foreach (FileInfo DelFile in mydir.GetFiles())
{
if (DelFile.CreationTime < JudgeDate)
File.Delete(DelFile.FullName);
}
}
public 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);
}
//要执行的任务
void doAt1AM(object state)
{
//执行功能...(我这里是删除log的功能)
DeleteExpireFile();
//再次设定
setTaskAtFixedTime();
}
}
调用代码:
private void Form1_Load(object sender, EventArgs e)
{
LogHelper.Instance.setTaskAtFixedTime();
}