elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Ayuda con Timer C#..
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con Timer C#..  (Leído 24,455 veces)
geek74

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Ayuda con Timer C#..
« Respuesta #10 en: 9 Julio 2009, 20:39 pm »

la solucion es mas sencilla que la que plantean con el Sleep, basta con que uses una variable de tipo intero dentro de la clase de tu form y uses el control Timer

private void timer1_Tick(object sender, EventArgs e)
        {
            int s = int.Parse(String.Format("{0:ss}", DateTime.Now));
            cajatexto.Text =s.ToString();
            if (s == 59)
            {
                contador += (s / 59);
                this.Text = contador.ToString();
            }
            
            
        }
con eso llevas un conteo de los minutos que estan pasando en tu form abierta.

aun existe otra forma mas sencilla

en el control timer.interval=60000 que son un minuto y en el form_load lo activas,


ya si lo que quieres mucho mejor

Crea una clase llamada Cronómetro, luego los métodos, iniciar, pausar y detener.
Crea una propiedad llamada Tiempo de tipo Timer
Crea una propiedad publica llamada Resultado de double
Crea una metodo para sobre escribir el método ToString(); y mostrar el resultado que así deseas:

En tu formulario entonces creas los botones y sus eventos respectivos y generas una instancia de tu clase cronómetro y haces los llamados en cada evento, así:


using System;
using System.Globalization;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public class Cronometro
    {
        private Timer Tiempo { get; set; }
        public Double Result { get; set; }

        public Cronometro()
        {
            Tiempo.Tick += new EventHandler(Tiempo_Tick);
            Tiempo.Interval = 100;
        }

        void Tiempo_Tick(object sender, EventArgs e)
        {
            Result++;
            //cada tick representa 100 milisegundos
        }

        public void Start()
        {
            Tiempo.Start();
        }

        public void Pause()
        {
            //
        }

        public void Stop()
        {
            Tiempo.Stop();
        }

        public override string ToString()
        {
            return string.Format(
                CultureInfo.CurrentCulture,
                "{0} ms",
                Result);

        }
    }
}
y luego:

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Cronometro Cronometro { get; set; }

        public Form1()
        {
            InitializeComponent();
            Cronometro = new Cronometro();
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            Cronometro.Start();
        }

        private void btnStop_Click(object sender, EventArgs e)
        {
            Cronometro.Stop();
        }
    }
}
Para mostrar el resultado utiliza el método Cronometro.ToString();

sin embargo hay otra opcion que creo que es mejor bueno a mi me a funcionado bien.
un timer y una variable private de tipo DateTime y le asignas un valor de DateTime.Now  dentro de la clase de tu Form

ahora en el evento del timer

private void timer1_Tick(object sender, EventArgs e)
        {
            
            DateTime t_final = DateTime.Now;
            TimeSpan tiempo = t_final - t_inicio;
            int seg_total = (int)(tiempo.TotalSeconds);
            int segundos = tiempo.Seconds;
            textEdit1.Text = seg_total.ToString();
            if ((seg_total % 60) == 1)
            {
               //conteo de minutos transcurridos
                minutos++;
                this.Text = minutos.ToString() + " : Minutos";
                
                
            }
        }



Saludos


« Última modificación: 9 Julio 2009, 22:54 pm por geek74 » En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Ayuda con Timer C#..
« Respuesta #11 en: 11 Julio 2009, 18:00 pm »

Jaja la verdad no fue tan difícil hacer la libreria. Gracias por la ayuda pero mi problema principal es que dentro de un evento "private static void OnTimedEvent(object source, ElapsedEventArgs e)" no puedo llamar a un método, lo que necesito es que el método para obtener componentes se llame cada minuto, habrá alguna otra manera de hacerlo?
Gracias

Eso me suena a un problema que tuve hace un tiempo con una aplicacion con 3 timers por separado. Me tiraba errores porque no podia acceder a otros Threads (hilos del proceso). La solucion? Crear UN solo metodo que haga lo que tenga que hacer, pero no llamarlo directamente, sino invocandolo a travez de un delegado.

Ejemplo:

Todos saben que para cambiar un label de otro Formulario se hace asi:
Código
  1. Form2 miForm = new Form2();
  2. miForm.Label2.Text = "Texto cambiado";

Pero si la segunda linea de ese codigo la hacias en el evento Tick de un Timer totalmente creado por codigo, tira el error que mencione antes. Y aqui la solucion
Código
  1. // Creamos el delegado
  2. delegate void dlgCambiarDatos();
  3.  
  4. // .......................
  5. // Evento Tick
  6. private void Tick(object sender, ElapsedEventArgs e)
  7. {
  8.      CambiarDatos();
  9. }
  10. // .......................
  11.  
  12. void CambiarDatos()
  13. {
  14.    if (this.InvokeRequired)  // Preguntamos al form (this) si estamos accediendo desde otro hilo
  15.    {
  16.        // Instanciamos el delegado y lo invocamos desde el mismo hilo del form
  17.        dlgCambiarDatos delegado = new dlgCambiarDatos(CambiarDatos);
  18.        this.Invoke(delegado);
  19.    }
  20.    else
  21.    {
  22.        // Estamos en el mismo hilo
  23.        // Aqui se cambian los datos comunmente sin errores :P
  24.    }
  25. }
  26.  


Espero que a alguien le sirva!!!!


En línea

MANULOMM


Desconectado Desconectado

Mensajes: 559


Erepublik.com


Ver Perfil
Re: Ayuda con Timer C#..
« Respuesta #12 en: 14 Julio 2009, 21:19 pm »

de hecho el problema del evento private static void OnTimedEvent(object source, ElapsedEventArgs e) esta en que es estatico, no puede llamar metodos de instacias que esten fuera del metodo pues este no tiene acceso a ese contexto, implicaria una reestructuracion de la libreria.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia
En línea


raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Ayuda con Timer C#..
« Respuesta #13 en: 15 Julio 2009, 18:30 pm »

de hecho el problema del evento private static void OnTimedEvent(object source, ElapsedEventArgs e) esta en que es estatico, no puede llamar metodos de instacias que esten fuera del metodo pues este no tiene acceso a ese contexto, implicaria una reestructuracion de la libreria.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia

Pero porque es estatico?? Que yo sepa no deberia serlo, no le veo un uso a instanciar un timer desde un metodo estatico  :-\
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda timer
Programación Visual Basic
asdexiva 3 2,331 Último mensaje 13 Marzo 2013, 00:01 am
por MCKSys Argentina
[AYUDA][NOVATO] Problema con Timer Task
Java
Noxware 0 1,712 Último mensaje 4 Octubre 2014, 02:22 am
por Noxware
[Ayuda]Timer en Android « 1 2 »
Java
PabloPbl 15 7,937 Último mensaje 13 Abril 2015, 21:38 pm
por PabloPbl
Ayuda timer en C#
.NET (C#, VB.NET, ASP)
KiddKeo 3 2,823 Último mensaje 1 Julio 2018, 14:48 pm
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines