特定の時間にイベントを生成するにはどうすればよいですか?たとえば、午前8時にアラートを生成して午前8時を通知するとします(または、任意の時点で現在の時刻を通知するイベント)。
System.Threading.Timer クラスを使用します:
var dt = ... // next 8:00 AM from now
var timer = new Timer(callback, null, dt - DateTime.Now, TimeSpan.FromHours(24));
callback
デリゲートは、次回の午前8時以降、24時間ごとに呼び出されます。
this SO question 次の午前8時の発生を計算する方法を参照してください。
Dtbの答えを詳しく説明すると、これが私がそれを実装した方法です。
private void Form1_Load(object sender, EventArgs e)
{
System.Threading.TimerCallback callback = new TimerCallback(ProcessTimerEvent);
//first occurrence at
var dt = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 10, 0, 0);
if (DateTime.Now < dt)
{
var timer = new System.Threading.Timer(callback, null,
//other occurrences every 24 hours
dt - DateTime.Now, TimeSpan.FromHours(24));
}
}
private void ProcessTimerEvent(object obj)
{
MessageBox.Show("Hi Its Time");
}
アラートはプログラムで生成する必要がありますか?別のアプローチは、 スケジュールされたタスク(Windowsの場合) を使用してアラートを生成することです。メインアプリケーションのデータファイルなどから情報を収集する小さなプログラムを作成する必要がある場合があります。
このアプローチを使用することには、いくつかの主な利点があります。
private void Run_Timer()
{
DateTime tday = new DateTime();
tday = DateTime.Today;
TimeSpan Start_Time = new TimeSpan(8,15,0);
DateTime Starter = tday + Start_Time;
Start_Time = new TimeSpan(20, 15, 0);
DateTime Ender = tday + Start_Time;
for (int i = 0; i <= 23; i++)
{
Start_Time = new TimeSpan(i, 15, 0);
tday += Start_Time;
if (((tday - DateTime.Now).TotalMilliseconds > 0) && (tday >= Starter) && (tday <= Ender))
{
Time_To_Look = tday;
timer1.Interval = Convert.ToInt32((tday - DateTime.Now).TotalMilliseconds);
timer1.Start();
MessageBox.Show(Time_To_Look.ToString());
break;
}
}
}
この関数を使用して、タイマーを一定時間実行したり、特定の時間に実行するように変更したりできます:D