システム クロックで 1 時間が経過するたびにイベントを発生させたいと考えています。たとえば、午前 7 時 45 分にプログラムを実行すると、イベントは午前 8 時 45 分ではなく午前 8 時に発生するはずです。午前 8:00 にイベントが発生した後、このイベントは午前 9:00、午前 10:00、午前 11:00 などの毎時間発生する必要があります。
誰でもコードを表示するのを手伝ってもらえますか...私はC#.netを使用しています...よろしくお願いします...
アップデート:
これで、質問に対する簡単な解決策が得られました。したがって、このソリューションを共有したいと思います。lboshuizenの答えはすでに正しいです。私の答えは、lboshuizenの答えと同じロジックですが、より詳細で正確です。
まず、Timer を使用する必要があります。タイマーは基本的にミリ秒単位で動作し、追加の計算が必要になる場合があります。そこで、まずはミリ秒から分の整形機能を実装したいと思います。
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() です。イベント スケジューラを開始する場所でこの関数を呼び出します。