Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Meta en 23 Diciembre 2015, 00:16 am



Título: Temporizador C#
Publicado por: Meta en 23 Diciembre 2015, 00:16 am
Hola:

En el formulario tengo un label y dos buttons. En el label muestra 00:00:00, que son horas, minutos, segundos.

El primer botón empieza llamado Start el contador, el otro botón llamado Stop es detener el temporizador y se pone a 00:00:00 y se queda detenido.

¿Cómo se hace en C#?

Por ahora he hecho esto.
Código
  1. public class form1{
  2.  
  3.   private Timer _timer = null;
  4.  
  5.   public void Form_Load(...){
  6.  
  7.        _timer= new Timer();
  8.  
  9.        _timer.Interval = 1000; // 1seg
  10.  
  11.        _timer.tick += timer_Tick;
  12.  
  13.   }
  14.  
  15.   private void btnIniciar_Click(...){
  16.  
  17.      _timer.Start();
  18.  
  19.  }
  20.  
  21.   private void btnIniciar_Click(...){
  22.  
  23.     _timer.Stop();
  24.  
  25.  }
  26.  
  27.   private void timer_Tick(...){
  28.  
  29.        label.Text = DateTime.Now.ToString("HH:mm:ss")
  30.  
  31.  }
  32.  
  33. }

La salida muestra la hora, quiero que muestre 00:00:00 cuando está en Stop, que empieze a contar el tiempo, cuando le de desconectar, se pone a 00:00:00. El problema que me muestra la hora actual, y no deseo eso.

Saludos.


Título: Re: Temporizador C#
Publicado por: Eleкtro en 23 Diciembre 2015, 00:46 am
Un Timer no es un "cronómetro" con el que medir intervalos de tiempo, y, aunque si que se puede utilizar con dicha finalidad, resultaría muy ineficiente en la medida.

Solución:
Utiliza la class StopWatch para medir, y el Timer para notificar del transcurso actual del StopWatch.
  • https://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch%28v=vs.110%29.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2

Saludos


Título: Re: Temporizador C#
Publicado por: Meta en 23 Diciembre 2015, 06:26 am
Hola:

Parece más complicado de lo que creía. Tengo que usar 16 temporizadores que al activar uno de ellos empieza por 00:00:00 (HH:MM:SS), y le doy el otro botón parar, se detiene y se pone a 00:00:00 de nuevo.

Por ahora pruebo con dos botones y un contador, lo llamo contador o temporizador o cronómetro para llamarlo de alguna manera.

DEja ver si me sale, luego aviso.


Título: Re: Temporizador C#
Publicado por: Eleкtro en 23 Diciembre 2015, 06:42 am
Parece más complicado de lo que creía.

Es algo facil, mira un ejemplo:

Vb.Net:
Código
  1. Public NotInheritable Class Form1 : Inherits Form
  2.  
  3.    Private stopwatchs As Stopwatch() = Enumerable.Repeat(New Stopwatch, 15).ToArray
  4.    Friend Timer1 As New Windows.Forms.Timer With {.Interval = 1000, .Enabled = False}
  5.  
  6.    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  7.        AddHandler Me.Timer1.Tick, AddressOf Timer1_Tick
  8.    End Sub
  9.  
  10.    Private Sub Button1_Click() Handles Button1.Click
  11.  
  12.        ' Iniciar stopwatchs...
  13.        For Each stw As Stopwatch In Me.stopwatchs
  14.            stw.Start()
  15.        Next stw
  16.  
  17.        Me.Timer1.Enabled = True
  18.        Me.Timer1.Start()
  19.  
  20.    End Sub
  21.  
  22.    Private Sub Button2_Click() Handles Button2.Click
  23.  
  24.        ' Detener stopwatchs...
  25.        For Each stw As Stopwatch In Me.stopwatchs
  26.            stw.Stop()
  27.        Next stw
  28.  
  29.        Me.Timer1.Stop()
  30.        Me.Timer1.Enabled = False
  31.  
  32.    End Sub
  33.  
  34.    Private Sub Timer1_Tick(sender As Object, e As EventArgs)
  35.  
  36.        For Each stw As Stopwatch In Me.stopwatchs
  37.            Console.WriteLine(stw.Elapsed.ToString)
  38.        Next stw
  39.  
  40.    End Sub
  41.  
  42. End Class

C#:
Código
  1. using Microsoft.VisualBasic;
  2. using System;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using System.Data;
  6. using System.Diagnostics;
  7. public sealed class Form1 : Form
  8. {
  9.  
  10. private Stopwatch[] stopwatchs = Enumerable.Repeat(new Stopwatch(), 15).ToArray;
  11. internal Windows.Forms.Timer Timer1 = new Windows.Forms.Timer {
  12. Interval = 1000,
  13. Enabled = false
  14.  
  15. };
  16. private void Form1_Load(object sender, EventArgs e)
  17. {
  18. this.Timer1.Tick += Timer1_Tick;
  19. }
  20.  
  21.  
  22. private void Button1_Click()
  23. {
  24. // Iniciar stopwatchs...
  25. foreach (Stopwatch stw in this.stopwatchs) {
  26. stw.Start();
  27. }
  28.  
  29. this.Timer1.Enabled = true;
  30. this.Timer1.Start();
  31.  
  32. }
  33.  
  34.  
  35. private void Button2_Click()
  36. {
  37. // Detener stopwatchs...
  38. foreach (Stopwatch stw in this.stopwatchs) {
  39. stw.Stop();
  40. }
  41.  
  42. this.Timer1.Stop();
  43. this.Timer1.Enabled = false;
  44.  
  45. }
  46.  
  47.  
  48. private void Timer1_Tick(object sender, EventArgs e)
  49. {
  50. foreach (Stopwatch stw in this.stopwatchs) {
  51. Console.WriteLine(stw.Elapsed.ToString);
  52. }
  53.  
  54. }
  55. public Form1()
  56. {
  57. Load += Form1_Load;
  58. }
  59.  
  60. }
  61.  
  62. //=======================================================
  63. //Service provided by Telerik (www.telerik.com)
  64. //=======================================================
  65.  


Título: Re: Temporizador C#
Publicado por: Meta en 23 Diciembre 2015, 09:55 am
Gracias.

Por lo que veo, hay que usar un timer si o si. En mi caso 16 timer, ejejjeje, y que sea indepentiende cada uno.

Sigo investigadno y me fijaré en el fondo tu código.

;)