繁体   English   中英

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

[英]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

计划任务编程接口是基于 COM 的,因此从 .NET 使用它应该相对容易(尽管我自己从未尝试过)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM