Comment puis-je générer un événement à une heure précise? Par exemple, supposons que je souhaite générer une alerte à 8h00 qui m'informe de 8h00 (ou d'un événement qui m'indique l'heure actuelle à tout moment).
Utilisez le System.Threading.Timer class:
var dt = ... // next 8:00 AM from now
var timer = new Timer(callback, null, dt - DateTime.Now, TimeSpan.FromHours(24));
Le délégué callback
sera appelé la prochaine fois à 8 heures et ensuite toutes les 24 heures.
Voir this SO question comment calculer l’occurrence suivante de 8h00.
En développant la réponse de dtb, voici comment je l’ai implémenté.
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");
}
L'alerte doit-elle être générée par votre programme? Une autre approche consiste à utiliser un tâche planifiée (sous Windows) pour générer l'alerte. Vous devrez peut-être écrire un petit programme qui rassemble toutes les informations des fichiers de données de votre application principale, etc.
Cette approche présente plusieurs avantages principaux:
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;
}
}
}
Nous pouvons utiliser cette fonction pour activer le chronomètre ou le changer pour qu’il s’exécute à un moment précis: D