El intervalo máximo de temporizador es 2.147.483.647. son aproximadamente 25 días. Pero en mis requisitos, necesito que el temporizador espere 30 días. ¿Cómo puedo resolverlo? Por favor ayuda.Intervalo de temporizador máximo
Respuesta
Usa un System.Threading.Timer
para esto. Hay constructores que toman un long
, un uint
o un TimeSpan
en lugar de un int
para el dueTime
. Cualquiera de estos le permitirá establecer un período de 30 días.
actualización: esta es la manera más fácil de hacerlo:
System.Threading.Timer _timer;
public void Start30DayTimer()
{
TimeSpan span = new TimeSpan(30, 0, 0, 0);
TimeSpan disablePeriodic = new TimeSpan(0, 0, 0, 0, -1);
_timer = new System.Threading.Timer(timer_TimerCallback, null,
span, disablePeriodic);
}
public void timer_TimerCallback(object state)
{
// do whatever needs to be done after 30 days
_timer.Dispose();
}
Y ahora solo tiene que mantener su sistema saludable y feliz durante 30 días. –
@Henk: la pregunta no dice nada sobre * por qué * el período del temporizador debe ser de 30 días. Por lo que sabemos, este temporizador se puede utilizar para enviar un correo electrónico a alguien que diga "hey, este servidor ha estado funcionando durante 30 días seguidos". – MusiGenesis
30 días, sí. Pero el máximo es de aproximadamente 49 días porque incluso si usa las versiones int64 o TimeSpan, no acepta un valor de más de 2 * 32-2 milisegundos. – RenniePet
int days = 30;
Cree un temporizador por un período de un día.
Decremento days
cada vez que se dispara el temporizador.
Estoy de acuerdo. Los temporizadores en realidad no tienen la intención de soportar períodos de tiempo tan prolongados como 30 días, aunque mi temporizador se ejecutaría más de una vez al día. – ChrisBD
System.Threading.Timer está limitado a aproximadamente 49 días (2 * 32 milisegundos), incluso utilizando las versiones int64 y TimeSpan. Entonces, para un temporizador de propósito general por períodos muy largos, algo así es un enfoque válido. – RenniePet
Siempre puede hacer que el temporizador espere un tiempo más corto, como un día y cada vez que el temporizador dispara incremente un contador y verifique el valor actual del contador. Si el valor es 30, ejecute el código que se supone que debe ejecutarse una vez cada 30 días.
Una mejor idea es establecer el valor en algún lugar en un archivo externo, de modo que si el programa se cierra inesperadamente, puede continuar desde donde lo dejó. Idealmente, probablemente desee colocar la siguiente fecha de ejecución en el archivo, de modo que si el programa está desactivado durante varios días, puede reanudar y hacer que se active en la fecha correcta sin tener que preocuparse por cuándo fue la última vez que se ejecutó. Así que algo como
NextRunDate = 10/10/2009 16:40
Cuando se ejecuta el programa que establece la fecha por delante de otros 30 días.
Establezca una variable de fecha y hora a la fecha y hora en que desea ejecutar lo que sea ... Luego haga que el temporizador revise cada minuto (o el nivel de exactitud requerido) para ver si esa fecha ha pasado.
Para hacer eso con un temporizador también necesita una aplicación y un PC que funciona sin interrupción durante más de 30 días. No es imposible, pero es un gran riesgo.
Parece que quiere la ejecución programada de algo. Calcule la fecha/hora objetivo y persista que sea un archivo XML o .config. Cuando se reinicia la aplicación, puede volver a calcular TimeSpan para activar el evento.
Este es el temporizador que le informa que su aplicación se implementa más correctamente como una tarea programada.
El constructor del temporizador tomará un TimeSpan que es int64 ticks seguramente eso es más de 25 días?
¿También ha considerado que el sistema no puede permanecer despierto durante 30 días?
Lo acabo de buscar, son 10,675,199 días.
Sugerí altamente el uso de la función de Windows Scheduled Task, especialmente si esto tiene la intención de ejecutar algo el mismo día de cada mes, ya que los meses varían entre 28 y 31 días.
Esta no es una respuesta a la pregunta. Es algo completamente diferente si inicia una aplicación en un momento dado (planificador) o si su aplicación en ejecución está haciendo algo en un momento dado (temporizador). –
La biblioteca Quartz.NET es otra opción para ejecutar su código de forma programada.
- 1. intervalo de cambio NSTimer para repetir temporizador
- 2. Suceso de elevación en intervalo/temporizador de alta resolución
- 3. GCD: Cómo cambiar el intervalo de incendios temporizador
- 4. C# temporizador que se dispara antes de su intervalo de tiempo
- 5. Cuadro de alerta de JavaScript con temporizador
- 6. Intervalo real de Scala, Intervalo int
- 7. Temporizador de bucle en JavaScript
- 8. Cálculo de fecha y hora Eje mínimo, máximo y mayor intervalo de marcación menor
- 9. Cómo obtener datos agregados por intervalo de tiempo (suma, promedio, mínimo, máximo, etc.) en Rails 3
- 10. WPF temporizador Al igual que C# temporizador
- 11. ¿Cómo cambio el tiempo de intervalo en System.Threading.Timer desde la función de devolución de llamada de este temporizador?
- 12. cómo cancelar la programación existente de un temporizador
- 13. obteniendo el intervalo de temporizador de doble clic del sistema en WPF (valor del panel de control)
- 14. Temporizador en el hilo de Java
- 15. ¿Cómo mido un intervalo de tiempo en C?
- 16. Temporizador Processing.js
- 17. jquery - ¿Temporizador?
- 18. Sobrecarga del temporizador en la aplicación C#
- 19. DispatcherTimer aplicar intervalo y ejecutar inmediatamente
- 20. Temporizador de Lisp común
- 21. temporizador de cuenta regresiva
- 22. Temporizador más confiable que System.Threading.Timer
- 23. Tiempo máximo de ejecución para JavaScript
- 24. Does boost :: asio :: deadline_timer utiliza un hilo para cada temporizador?
- 25. PHP intervalo de fechas Comprobar
- 26. intervalo de tiempo y UTC
- 27. Android AutoSync Intervalo de ejecución?
- 28. vcovHC e intervalo de confianza
- 29. intervalo de actualización en requestLocationUpdates
- 30. ISO 8601 intervalo de repetición
que temporizador ?? ¡Hay al menos 3 temporizadores diferentes en .NET! –
System.Threading; – Wilson
No es un error por cierto. Un error es cuando su código y sus especificaciones no están de acuerdo. Creo que encontrarás que esta es una limitación bien documentada. – paxdiablo