私はC#でこれを一般的に行う方法を調査しましたが、タスクのスケジュールを考え続けましたが、それが必要かどうかはわかりません。これが私が思いついたものです
void MainPage_Loaded(Object sender, RoutedEventArgs e)
{
tomorrowAt8AM = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.AddDays(1).Day, 8, 0, 0);//This is always 'tomorrow' at 8 am.. I think.
TimeSpan timeSpan = tomorrowAt8AM.Subtract(DateTime.Now);
timer.Interval = timeSpan;
timer.Tick += new EventHandler(timerTick);
queryDB();
timer.Start();
}
private void timerTick(object sender, EventArgs e)
{
queryDB();
//Recalculate the time interval.
tomorrowAt8AM = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.AddDays(1).Day, 8, 0, 0);//This is always 'tomorrow' at 8 am.. I think.
TimeSpan newTimerInterval = tomorrowAt8AM.Subtract(DateTime.Now);
timer.Interval = newTimerInterval;
}
アイデアは、「今」から「明日の午前 8 時」までの時間を調べ、そのタイムスパンを新しいタイマー間隔として設定することです。私の頭の中でこれはうまくいきます..これを行うためのより良い方法はありますか? 間隔を変更したため、タイマーを再起動する必要がありますか?
@Richard Deemingこれは、1月31日の場合に何が起こるかをテストするためのコードのスライスです。
System.DateTime tomorrowAt8AM = new System.DateTime(DateTime.Now.Year, 2, 1, 8, 0, 0);//This is always the 'next' day at 8 am.
while (true)
{
DateTime temp = new DateTime(DateTime.Now.Year, 1, 31, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);
DateTime now = DateTime.Now;
System.TimeSpan diff1 = tomorrowAt8AM.Subtract(temp);
//Console.WriteLine(diff1.Days);
Console.WriteLine("Days: {3}, Hours: {0}, Minutes: {1}, Seconds: {2}", diff1.Hours, diff1.Minutes, diff1.Seconds, diff1.Days);
Thread.Sleep(1000);
}
このコードを実行すると、正しく動作するように見えます.月末に問題が発生する可能性はありますか?