在C#Timer中完成小时后正好点火蜱事件

Ism*_*ilS 4 c# events timer

我希望tick事件在每小时完成时完全触发.对于例如,它应该打勾8 am然后9 am再对10 am等,这是简单,我需要设置Interval3600000.

这里的问题是我应该如何确定何时启动计时器?我正在创建一个工具,从用户登录时开始在系统托盘中运行.

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,因此无法提供任何屏幕截图.

  • @SubniC:我认为他不知道我给他看的替代方案.直接回答问题的答案并非在每种情况下都是最佳答案. (3认同)

Sae*_*iri 5

也许下面的代码有问题,但想法是这样的:

    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;