我正在开发一个程序,需要在一天的某个小时删除一个文件夹(然后重新实例化),这个小时将由用户提供。
小时很可能是在夜晚,因为没有人访问该文件夹(它在工作时间以外)。有没有办法在那个时刻触发该事件?
我知道计时器,但是有没有一个计时器可以更简单的方法来执行此操作,这些计时器可以检查并检查它是什么时间?
编辑:也许我不够具体。我想触发一个方法来做某事,而不必先在一个单独的可执行文件中编译它。此方法是作为Windows服务实现的更大类的一部分。所以这项服务会持续运行,但在一天中的某个时间,它应该触发此功能来删除该文件夹。
感谢。
答案 0 :(得分:7)
开箱即用。
不需要对这类工作进行编码 - 使用Scheduled Tasks,他们已经在Windows中使用了很长时间。你可以从这开始你的程序。
更新 :(在更新问题之后)
如果您需要从已经运行服务触发方法,请使用计时器并针对目标时间测试DateTime.Now
。
答案 1 :(得分:5)
如果要在代码中执行此操作,则需要使用Timer类并触发Elapsed事件。
一个。计算第一次运行时间的剩余时间。
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();
℃。设置方法确实执行您想要执行的操作。
public void doStuff(object sender, ElapsedEventArgs e) { // Do your stuff and recalculate the timer interval and reset the Timer. }
答案 2 :(得分:2)
何时
计算剩余时间(以毫秒为单位)并设置定时器间隔。
答案 3 :(得分:2)
使用Windows Scheduler。在那里,您可以指定何时执行哪个文件。
答案 4 :(得分:1)
可能的开始或指南:NCrontab
答案 5 :(得分:1)
programmatic interface for Scheduled Task是基于COM的,因此从.NET中使用它应该相对容易(尽管我从未尝试过自己)。