28

特定の時間にイベントを生成するにはどうすればよいですか?たとえば、午前8時にアラートを生成して午前8時(または任意の時点で現在の時刻を通知するイベント)を通知するとします。

4

4 に答える 4

47

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時間ごとに呼び出されます。

次の午前8時の発生を計算する方法については、このSOの質問を参照してください。

于 2009-08-18T23:29:28.037 に答える
9

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");
    }
于 2011-12-27T04:32:01.440 に答える
1

アラートはプログラムによって生成される必要がありますか?別のアプローチは、(Windowsの)スケジュールされたタスクを使用してアラートを生成することです。メインアプリケーションのデータファイルなどから情報を収集する小さなプログラムを作成する必要がある場合があります。

このアプローチを使用することには、いくつかの主な利点があります。

  1. この機能をサポートするためにコードを記述する必要はありません。オペレーティングシステムに組み込まれているものを利用します。この例はWindows用ですが、他のOSにも同じ機能があります。開発とサポートの努力を自分のコードに集中させることができます。
  2. タスクを起動するためにメインアプリケーションを実行する必要はありません。
于 2009-12-10T22:56:50.763 に答える
0
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

于 2009-08-20T23:53:28.540 に答える