我希望tick事件在每小时完成时完全触发.对于例如,它应该打勾8 am
然后9 am
再对10 am
等,这是简单,我需要设置Interval
到3600000
.
这里的问题是我应该如何确定何时启动计时器?我正在创建一个工具,从用户登录时开始在系统托盘中运行.
VVS*_*VVS 10
请不要创建一个只会浪费内存的程序.这就是Windows的任务计划程序的用途.从这样的任务每小时运行一次程序.
http://msdn.microsoft.com/en-us/library/aa384006%28v=VS.85%29.aspx
这是一个示例:
.
Run Daily
Start today at 8:00 am
Repeat every 1 Hour
Run Code Online (Sandbox Code Playgroud)
很抱歉,由于我运行的是德语版的Windows 7,因此无法提供任何屏幕截图.
也许下面的代码有问题,但想法是这样的:
public void InitTimer()
{
DateTime time = DateTime.Now;
int second = time.Second;
int minute = time.Minute;
if (second != 0)
{
minute = minute > 0 ? minute-- : 59;
}
if (minute == 0 && second == 0)
{
// DoAction: in this function also set your timer interval to 3600000
}
else
{
TimeSpan span = new TimeSpan(0, 60 - minute, 60 - second);
timer.Interval = (int) span.TotalMilliseconds - 100;
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
}
}
void timer_Tick(object sender, EventArgs e)
{
timer.Interval = 3600000;
// DoAction
}
Run Code Online (Sandbox Code Playgroud)
根据 @smirkingman 的建议,由于项目启动和应用程序运行时间的延迟,我删除了 100 毫秒:
timer.Interval = (int) span.TotalMilliseconds - 100;