【发布时间】:2012-10-03 09:59:39
【问题描述】:
我想在系统时钟中每个小时过去时引发一个事件。 例如,我在早上 7:45 运行我的程序,那么应该在早上 8:00 而不是早上 8:45 提出事件。 上午 8:00 发起活动后,应在上午 9:00、上午 10:00、上午 11:00 等每小时发起一次...
谁能帮我展示一些代码... 我使用 C#.net ... 提前谢谢...
更新:
现在我得到了我的问题的简单解决方案。因此,我想分享这个解决方案。 lboshuizen 的回答已经是正确的了。我的回答与 lbohuizen 的回答逻辑相同,但更详细和准确。
首先它需要使用定时器。计时器基本上基于毫秒工作,有时需要额外计算。因此,我想首先实现毫秒到分钟的格式化功能。
int CalculateMillisecondUntilNextHour()
{
int REMAIN_MINUTE = 60 - DateTime.Now.Minute;
DateTime now = DateTime.Now;
DateTime nexthour = now.AddMinutes((minute)).AddSeconds(now.Second * -1).AddMilliseconds(now.Millisecond * -1);
TimeSpan interval = nexthour - now;
return (int)interval.TotalMilliseconds;
}
void CheckEachHourPassed()
{
System.Windows.Forms.Timer t = new System.Windows.Forms.Timer();
t.Interval = CalculateMillisecondUntilNextHour();
t.Tick += new EventHandler(t_Tick);
t.Enabled = true;
}
void t_Tick(object sender, EventArgs e)
{
MessageBox.Show("Raise Your Event");
t.Interval = CalculateTimerInterval(REMAIN_MINUTE);
}
在这里,主要的工作函数是CheckEachHourPassed()。在要启动事件调度程序的地方调用此函数。
【问题讨论】:
-
google 肯定会告诉你
-
@daveL,没什么,这很明显
-
你试过什么?你见过this吗?
-
如果您需要每小时运行一次,请使用调度程序(例如内置于 Windows 中的调度程序),而不是自己在自己的代码中实现调度程序。尤其是如果您在每小时剩下的 59 分钟内不做任何事情。
-
@lblshuizen,我已经尝试过线程、秒表和计时器。我只是想征求你的建议。
标签: c#