Wie erzeugte ich eine Warnung zu einer bestimmten Zeit in C#?
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).
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:
- 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.
- 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.