Question

Comment puis-je générer un événement à un moment précis? Par exemple, disons que je veux générer une alerte à 8h00 qui me informe son 8:00 (ou un événement qui me informe de l'heure à tout moment).

Était-ce utile?

La solution

Utilisez le System.Threading.Timer classe:

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

Le délégué de callback sera appelé la prochaine fois, il est 8h00 et toutes les 24 heures par la suite.

Voir cette question SO comment calculer la prochaine occurrence 8:00 AM.

Autres conseils

Élaborant sur la réponse de DTB est ce que j'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 doivent être générés par votre programme? Une autre approche consiste à utiliser un tâche planifiée (en windows) pour générer l'alerte. Vous devrez peut-être écrire un petit programme qui rassemble toutes les informations de votre principal fichiers de données de l'application, etc.

Il y a deux principaux avantages à utiliser cette approche:

  1. Vous ne devez pas écrire de code pour soutenir la fonction. Vous utilisez quelque chose intégré dans le système d'exploitation. L'exemple est pour Windows, mais d'autres ont la même OSes fonction. Vous pouvez vous concentrer votre développement et l'effort de soutien de votre propre code.
  2. Votre application principale ne doit pas être en cours d'exécution pour la tâche au feu.
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 obtenir la minuterie en cours d'exécution pour les temps ou le changer pour fonctionner sur un moment précis: D

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top