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

C# 如何在一天中的特定时间触发事件?,c#,events,timer,triggers,C#,Events,Timer,Triggers,我正在开发一个程序,它需要在一天中的某个小时删除一个文件夹(然后重新实例化),这个小时将由用户指定 该时间最有可能是在夜间,因为此时没有人访问该文件夹(在工作时间之外)。有没有办法在那个特定的时间触发那个事件 我知道计时器,但是没有计时器滴答滴答地检查时间,有没有更简单的方法 编辑:可能我不够具体。我想触发一个方法来做一些事情,而不必首先在一个单独的可执行文件中编译它。此方法是作为Windows服务实现的更大类的一部分。因此,此服务会持续运行,但在一天中的某个时间,它会触发此功能以删除文件夹 谢

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

该时间最有可能是在夜间,因为此时没有人访问该文件夹(在工作时间之外)。有没有办法在那个特定的时间触发那个事件

我知道计时器,但是没有计时器滴答滴答地检查时间,有没有更简单的方法

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

谢谢。

开箱思考

这种作业使用不需要编码,它们在windows中已经存在很长时间了。你可以从这里开始你的节目

更新:(问题更新后)


如果您需要从已经运行的服务触发一个方法,请使用计时器并根据目标时间测试
DateTime。现在

  • 节目开始了
  • 计时器被改变了
  • 活动已经结束

计算剩余时间(以毫秒为单位)并设置计时器间隔

使用Windows调度程序。在那里,您可以指定何时执行哪个文件。

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

如果您想在代码中执行此操作,则需要使用Timer类并触发已用事件

计算距离第一次运行时间的剩余时间

B.设置计时器事件

C.设置方法并执行您想要执行的操作


这是您的程序应该完成的唯一任务吗?如果是这样的话,为什么不使用任务计划程序呢?您不能设置一个计时器,使其只在.TotalSeconds(现在是.TotalSeconds)内计时吗?这不是你想要的吗?这需要一个应用程序运行。在服务中运行此类计时问题可能更合适。@citro,是的,但这需要与服务通信的复杂性和权限。不知道应用程序的其他部分做什么,我选择了最短路径。谢谢,好主意。还发现此链接可能对其他人有帮助:
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.
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.
 }