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