Frage

Wie kann ich zu einem bestimmten Zeitpunkt ein Ereignis generieren? Sagen Sie zum Beispiel, ich möchte um 8:00 Uhr eine Warnung generieren, die mich um 8:00 Uhr informiert (oder ein Ereignis, das mich zu einem bestimmten Zeitpunkt über die aktuelle Zeit informiert).

War es hilfreich?

Lösung

Verwenden Sie das System.Threading.timer Klasse:

var dt = ... // next 8:00 AM from now
var timer = new Timer(callback, null, dt - DateTime.Now, TimeSpan.FromHours(24));

Das callback Der Delegate wird beim nächsten Mal um 8:00 Uhr und alle 24 Stunden danach aufgerufen.

Sehen Diese Frage So berechnen Sie das nächste Ereignis um 8:00 Uhr.

Andere Tipps

Auf diese Weise habe ich sie implementiert.

  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");
    }

Muss die Warnung von Ihrem Programm generiert werden? Ein alternativer Ansatz ist die Verwendung a Geplante Aufgabe (in Windows) Um den Alarm zu erzeugen. Möglicherweise müssen Sie ein kleines Programm schreiben, das alle Informationen aus den Datendateien Ihrer Hauptanwendung usw. sammelt.

Die Verwendung dieses Ansatzes hat einige Hauptvorteile:

  1. Sie müssen keinen Code schreiben, um die Funktion zu unterstützen. Sie verwenden etwas, das in das Betriebssystem eingebaut ist. Das Beispiel ist für Windows, aber andere OSS haben die gleiche Funktion. Sie können Ihre Entwicklung und Ihre Bemühungen auf Ihren eigenen Code konzentrieren.
  2. Ihre Hauptanwendung muss nicht für die Aufgabe ausgeführt werden.
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;
            }
        }
    }

Wir können diese Funktion verwenden, um den Timer für Zeiten zum Laufen zu bringen oder sie in einer bestimmten Zeit auszuführen: D.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top