Estoy trabajando en un pequeño rastreador web que se ejecutará en la bandeja del sistema y rastreará un sitio web cada hora en una hora.¿Cómo puedo generar un evento cada hora (o un intervalo de tiempo específico cada hora) en .NET?
¿Cuál es la mejor forma de que .NET genere un evento cada hora o algún otro intervalo para realizar alguna tarea? Por ejemplo, quiero ejecutar un evento cada 20 minutos según la hora. El evento se levantará en:
00:20
00:40
01:00
01:20
01:40
y así sucesivamente. La mejor manera en que puedo pensar para hacer esto es creando un ciclo en un hilo, que comprueba constantemente si el tiempo es divisible por un intervalo dado y genera un evento de devolución de llamada si se alcanza la hora. Siento que tiene que haber una mejor manera.
Yo usaría un Timer
pero preferiría algo que siga un "cronograma" que se ejecute en la hora o algo por el estilo.
¿No es posible configurar mi aplicación en el programador de tareas de Windows?
ACTUALIZACIÓN:
estoy añadiendo mi algoritmo para calcular el intervalo de tiempo de un temporizador. Este método toma un parámetro "minute
", que es a qué hora el temporizador debe activar un tic. Por ejemplo, si el parámetro "minute
" es 20, entonces el temporizador marcará los intervalos en el horario anterior.
int CalculateTimerInterval(int minute)
{
if (minute <= 0)
minute = 60;
DateTime now = DateTime.Now;
DateTime future = now.AddMinutes((minute - (now.Minute % minute))).AddSeconds(now.Second * -1).AddMilliseconds(now.Millisecond * -1);
TimeSpan interval = future - now;
return (int)interval.TotalMilliseconds;
}
Este código se utiliza de la siguiente manera:
static System.Windows.Forms.Timer t;
const int CHECK_INTERVAL = 20;
static void Main()
{
t = new System.Windows.Forms.Timer();
t.Interval = CalculateTimerInterval(CHECK_INTERVAL);
t.Tick += new EventHandler(t_Tick);
t.Start();
}
static void t_Tick(object sender, EventArgs e)
{
t.Interval = CalculateTimerInterval(CHECK_INTERVAL);
}
convenidas - temporizadores son el camino a seguir. Los "bucles que controlan" son solo otra forma de decir "sondeo" y la votación mata. Usar un temporizador es tu mejor opción. – Keithius
Se realizó una edición, pero hasta que se apruebe: timer.Interval = adjust * 60 * 1000. El intervalo es en milisegundos. Consulte [Intervalo de temporizador] (http://msdn.microsoft.com/en-us/library/system.timers.timer.interval.aspx) para obtener más información –
Solo como referencia, si desea que el evento se active cada diez minutos, el intervalo tendrá que establecerse en 10 minutos después de que el evento transcurrido haya sido disparado por primera vez. De lo contrario, el evento continuará disparando a cualquier valor en el que se haya establecido el Intervalo inicial (10 - (minutos% 10)). – Erresen