2010-03-19 54 views
4

我正在制作一个程序,该程序需要在一天中的某个小时删除一个文件夹(然后重新实例化它),并且这个小时将由用户给出。C#如何在特定时间触发事件?

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

我知道定时器,但有没有一个更简单的方法来做到这一点,没有一个计时器蜱和检查,看看现在是几点?

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

谢谢。

+1

这是你的程序应该完成的唯一任务?如果是这样,为什么不使用任务调度程序? – devnull 2010-03-19 10:45:15

+0

难道你不能设置一个计时器只在(now-when).TotalSeconds中打勾吗?那不就是你想要的吗? – ANeves 2010-03-19 10:46:28

回答

7

开箱即用。

不需要编码这种工作 - 使用Scheduled Tasks,他们已经在窗户很长一段时间。你可以从这里启动你的程序。

更新:(以下更新质疑)

如果你需要从一个已经运行业务触发的方法,使用计时器和测试DateTime.Now对你的目标时间。

+0

谢谢,好主意。还发现这个链接,可能会证明对其他人有帮助: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/8240ca9c-a70e-4827-b5ff-c576d632862c – Andrei 2010-03-19 11:06:02

2

  • 程序启动
  • 定时器变为
  • 事件已完成

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

+0

这将需要一个应用程序正在运行。在服务中运行这样的时间问题可能更合适。 – citronas 2010-03-19 10:46:01

+0

@citro,是的,但这需要与服务进行通信的复杂性和权限。不知道应用程序的其他部分如何,我选择了最短路径。 – 2010-03-19 11:22:43

3

使用Windows调度程序。在那里你可以指定哪个文件在什么时候执行。

2

如果您想在代码中执行此操作,您需要使用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. 
} 
相关问题