Pregunta

¿Cómo puedo generar un evento en un momento determinado? Por ejemplo, digamos que quiero generar una alerta a las 8:00 AM que me informa de su 08 a.m. (o un evento que me informa de la hora actual en un momento dado).

¿Fue útil?

Solución

Utilice la System.Threading.Timer clase:

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

El delegado callback se llamará la próxima vez que son las 8:00 de la mañana y cada 24 horas a partir de entonces.

esta cuestión de forma la forma de calcular la próxima 08 a.m. ocurrencia.

Otros consejos

Al explicar la respuesta de DTB así es como he implementado a él.

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

¿La alerta tiene que ser generado por su programa? Un enfoque alternativo es utilizar un tarea programada (en windows) para generar la alerta. Puede que tenga que escribir un pequeño programa que recoge toda la información de los archivos de datos de la aplicación principal, etc.

Hay un par de los beneficios principales de utilizar este enfoque:

  1. Usted no tiene que escribir ningún código para admitir la función. Hacer uso de algo integrado en el sistema operativo. El ejemplo es para Windows, pero otros sistemas operativos tienen la misma función. Puede concentrar su desarrollo y esfuerzo de apoyo en su propio código.
  2. Su aplicación principal no tiene que estar en ejecución para la tarea al fuego.
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;
            }
        }
    }

Podemos usar esta función para conseguir el temporizador corriendo para tiempos o cambiar para que se ejecute en un momento determinado: D

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top