Dudas con mi agenda!! c#.

Iniciado por Hartigan, 26 Agosto 2010, 14:16 PM

0 Miembros y 1 Visitante están viendo este tema.

Hartigan

Buego sigo sin saber como programar mis alarmas. Os explico.

Esque como hago para que el timer sepa las alarmas que hay en la base de datos y las vaya comprobando??? YO había pensado crear un dataTable en el formulario principal, el cual obtiene los datos de la base de datos y el timer solo los tiene que usar...


Por otra parte. Supongamos que el timer está comprobando alarmas, y de repente añado una nueva alarma, como hago para que el timer se detenga y lea ahora los nuevos datos de la base de datos???

gracias de antemano

raul338

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 :P

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 :P

Hartigan

#22
Cita de: raul338 en 14 Septiembre 2010, 22:25 PM
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 :P

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 :P

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:

Código (csharp) [Seleccionar]


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...

raul338

Justamente la comparacion que estoy haciendo es muy similar

Pues la verdad nunca uso los timer comunes, simpre los creo por codigo de la clase System.Timers y siempre hago Timer.Start y Timer.Stop

Hartigan

Cita de: raul338 en 14 Septiembre 2010, 23:40 PM
Justamente la comparacion que estoy haciendo es muy similar

Pues la verdad nunca uso los timer comunes, simpre los creo por codigo de la clase System.Timers y siempre hago Timer.Start y Timer.Stop

mmm bueno pues ya veré alomerjo lo cambio y lo creo por código en lugar de usar el control.

Hartigan

Bueno chic@s, pues deciros que ya tengo mis alarmas creadas y funcionando perfectamente. jejejeje.

Gracias a todos por la ayuda  ;-)

Hartigan

Tengo una nueva duda y lo pregunto aquí para no crear tropecientos hilos. xDD

El caso es que tengo un string con el siguiente formato de fecha "dd/MM/yyyy" y quiero convertirlo a string con el formato "yyyy/MM/dd".

Como puedo hacerlo???

Salu2.l

[D4N93R]


Hartigan

Gracias ya lo conseguí aunque tampoco era así como lo quería, sino "yyyyMMdd" sin las barras, para que me lo leyera bien el vCard que no lo estaba haciendo bien, pero ahora sí. xD