2008-12-16 6 views
9

¿Hay alguna forma de recibir notificaciones de cambios de fecha en C#?¿Hay alguna manera de recibir notificaciones de cambios de fecha en C#?

Tengo un requisito en el que tengo que hacer algo cuando se cambia la fecha del sistema.

Descubrí que SystemsEvent.TimeChanged es un evento que puede engancharse, sin embargo, solo se activa solo cuando el usuario ha cambiado la hora.

+0

Debe describir lo que está tratando de lograr y lo que quiere decir con el cambio de fecha del sistema. Todas las respuestas son adivinar cuál es tu pregunta real. –

Respuesta

6

¿Se manejaría mejor teniendo un trabajo de tarea/cron programado que se ejecuta a medianoche?

2

Se podría implementar este (aunque mal) de la siguiente manera:

escribir una clase muy ligero que simplemente almacena la fecha actual. Comience con un hilo separado y haga que revise periódicamente la fecha, luego duerma durante un tiempo prolongado (de hecho, podría hacerlo dormir por un tiempo más prolongado que el tiempo que queda hasta la medianoche). Si la fecha ha cambiado, haga que llame a una función de devolución de llamada en la parte principal de su aplicación.

Como dije, esto no parece una solución brillante para su problema y probablemente haya maneras mucho mejores de hacerlo.

+0

Realmente no hay razón para perder un hilo en esto. Simplemente agregue una devolución de llamada como sugiere Darryl Braaten. Las devoluciones de llamada se ejecutan mediante un hilo de subprocesos, por lo que no es necesario que tenga un hilo para esto. –

0

Su aplicación podría ejecutar un ciclo que duerme por un minuto, luego verifica la fecha. Si es diferente a la última vez, ejecuta tu lógica.

Pero estoy de acuerdo en que este escenario se manejaría mejor con una tarea programada.

0

No estoy seguro si hay un evento para esto, pero si no, una solución utilizable sería disparar un temporizador cada minuto, y si el tiempo cambió más de 5 minutos entre llamadas, entonces puede estar bastante seguro de que el tiempo ha sido cambiado de una manera u otra. Podrías ir más fino si lo deseas, disparando el evento cada segundo y verificando la diferencia de tiempo, de más de 10 segundos, pero cada minuto sería suficiente.

1

Suponiendo que lo que está pidiendo es saber cuando un usuario cambia la fecha \ momento de su PC, la única forma que conozco para hacer esto es para controlar el EventLog, algo como esto:

static System.Diagnostics.EventLog log = new EventLog("System"); 

    public Form1() 
    { 
     log.EntryWritten += new EntryWrittenEventHandler(log_EntryWritten); 
     log.EnableRaisingEvents = true; 
    } 

    void log_EntryWritten(object sender, EntryWrittenEventArgs e) 
    { 
     if (e.Entry.InstanceId == 1 && e.Entry.EntryType == EventLogEntryType.Information) 
      Console.WriteLine("Test"); 
    } 
0

o utilizar esta información para el horario de verano: TimeZone.CurrentTimeZone.GetDaylightChanges (DateTime.Today.Year)

2

el sistema emite una WM_TIMECHANGE message cuando el usuario cambia la fecha/hora del sistema. La forma correcta de manejar esto es manejar ese mensaje. Sospecho que el evento .net SystemEvents.TimeChanged es solo una envoltura de esto.

Cuestiones relacionadas