Yo hice un timer para apagar la pc a cierta hora, asi que lo que hago es esto
Creo un TimeSpan con la diferencia de horas desde "ahora" hasta la hora destinada de la tarea (apagado)
Con el timer cada 1 segundo le resto... precisamente 1 segundo
En el timer, si el timeSpan llega a 0 (y/o la hora de la tarea es la actual) simplemente hacer la tarea
O sea , puedes usar en el timer tantos if o timespan como tareas... aunque dudo que tengas muuchas tareas al mismo tiempo (como para ralentizar el timer) asi que es efectivo
gracias de momento he probado con la cadena del compañero 43H4FH44H45H4CH49H56H45H a ver si me funcionar, y lo he hehco como dije. Acabo de programar un aviso a ver si me sale. Ahora os digo
EDITO: no me ha saltado el menasje ... voy a revisar. he puesto esto:
Primero leo los datos de la base de datos en un DataTable, y a continuación hago que el ticker se pare y vuelva a empezar con la función enabled. Es decir:
private void Funcion_Reprogramar_Timer(bool valor)
{
if (valor == true)
{
GestorAvisos ga
= new GestorAvisos
(); DataTable tabla = ga.Obtener_Lista_Avisos(factoriaDAO, login);
if (tabla != null)
{
this.timerAlarmas.Enabled = false;
Tabla = tabla;
this.timerAlarmas.Enabled = true;
}
else
{
this.timerAlarmas.Enabled = false;
}
}
else
{
this.timerAlarmas.Enabled = false;
}
}
private void timerAlarmas_Tick(object sender, EventArgs e)
{
int i = 0;
int max = Tabla.Rows.Count;
int anno;
int hora, minutos, segundos;
int dia, mes, año;
for (i = 0; i < max; i++)
{
dia = Convert.ToInt32(Tabla.Rows[i][4].ToString().Substring(0, 2));
mes = Convert.ToInt32(Tabla.Rows[i][4].ToString().Substring(3, 2));
anno = Convert.ToInt32(Tabla.Rows[i][4].ToString().Substring(6, 4));
hora = Convert.ToInt32(Tabla.Rows[i][5].ToString().Substring(0, 2));
minutos = Convert.ToInt32(Tabla.Rows[i][5].ToString().Substring(3, 2));
segundos = Convert.ToInt32(Tabla.Rows[i][5].ToString().Substring(6, 2));
if ((DateTime.Now.Year == anno) &&(DateTime.Now.Month == mes) && (DateTime.Now.Day == dia) && (DateTime.Now.Hour == hora) && (DateTime.Now.Minute == minutos) &&
(DateTime.Now.Second == segundos))
{
this.timerAlarmas.Enabled = false;
MessageBox.Show(Tabla.Rows[i][2].ToString(), "ALARMA", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
}
}
En principi los datos los coge bien. Como detalle decir que en la bdd almaceno la fecha y la hora como strings porque me es más fácil manejarlas.
A ver si me ayudais.
EDITO:
Vale Solucionado. Ya me funcionar. (modifico el código)
Por cierto tengo una duda, es mejor por el timer en Enabled = false y luego volver a ponerlo en Enabled = true o usar stop y start??? lo digo por el tema de reiniciarlo, ya que me comentaron que el timer tiene un límite aunque es bastante grande, pero sino lo reinicio nunca pues...