[英]C# How can I trigger an event at a specific time of day?
我正在开发一个程序,该程序需要在一天中的某个时间删除一个文件夹(然后重新实例化它),这个时间将由用户指定。
这个时间很可能是在晚上,因为那时没有人访问该文件夹(工作时间之外)。 有没有办法在特定时间触发该事件?
我知道计时器,但是有没有更简单的方法来做到这一点,而没有计时器可以滴答并检查时间?
编辑:也许我不够具体。 我想触发一个方法来做某事,而不必先在单独的可执行文件中编译它。 此方法是作为 Windows 服务实现的更大类的一部分。 所以这个服务一直在运行,但是在一天中的某个时间,它应该触发这个函数来删除文件夹。
谢谢。
打破常规思考问题。
不需要在这种工作上编码 - 使用计划任务,它们在 Windows 中已经存在很长时间了。 你可以从这里开始你的程序。
更新:(在问题更新之后)
如果您需要从已运行的服务触发方法,请使用计时器并针对您的目标时间测试DateTime.Now
。
如果要在代码中执行此操作,则需要使用 Timer 类并触发 Elapsed 事件。
A. 计算距您的第一个运行时间还剩多少时间。
TimeSpan day = new TimeSpan(24, 00, 00); // 24 hours in a day. TimeSpan now = TimeSpan.Parse(DateTime.Now.ToString("HH:mm")); // The current time in 24 hour format TimeSpan activationTime = new TimeSpan(4,0,0); // 4 AM TimeSpan timeLeftUntilFirstRun = ((day - now) + activationTime); if(timeLeftUntilFirstRun.TotalHours > 24) timeLeftUntilFirstRun -= new TimeSpan(24,0,0); // Deducts a day from the schedule so it will run today.
B. 设置定时器事件。
Timer execute = new Timer(); execute.Interval = timeLeftUntilFirstRun.TotalMilliseconds; execute.Elapsed += ElapsedEventHandler(doStuff); // Event to do your tasks. execute.Start();
C. 设置方法执行你想做的事情。
public void doStuff(object sender, ElapsedEventArgs e) { // Do your stuff and recalculate the timer interval and reset the Timer. }
什么时候
计算剩余时间(以毫秒为单位)并设置定时器间隔。
使用 Windows 调度程序。 在那里您可以指定何时执行哪个文件。
一个可能的开始或指南: NCrontab
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.