C#如何在一天中的特定时间触发事件?

时间:2010-03-19 10:39:47

标签: c# events timer triggers

我正在开发一个程序,需要在一天的某个小时删除一个文件夹(然后重新实例化),这个小时将由用户提供。

小时很可能是在夜晚,因为没有人访问该文件夹(它在工作时间以外)。有没有办法在那个时刻触发该事件?

我知道计时器,但是有没有一个计时器可以更简单的方法来执行此操作,这些计时器可以检查并检查它是什么时间?

编辑:也许我不够具体。我想触发一个方法来做某事,而不必先在一个单独的可执行文件中编译它。此方法是作为Windows服务实现的更大类的一部分。所以这项服务会持续运行,但在一天中的某个时间,它应该触发此功能来删除该文件夹。

感谢。

6 个答案:

答案 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中使用它应该相对容易(尽管我从未尝试过自己)。