Timer

martedì 03 agosto 2010 - 19.04

andreadp Profilo | Junior Member

Salve a tutti. Dovrei realizzare un contatore tramite la classe System.Timers.Timer. Con delle label dovrei visualizzare le ore i minuti e i secondi in tempo reale....qualche suggerimento??

Andrea

StefanoRicci Profilo | Junior Member

se usi quella classe setti ogni quanti milli secondi generare l'evento... con un metodo che leghi all'evento fai contare il numero delle volte che è stato generato l'evento ed in funzione di quello sai quanto è passato in termini di milli secondi... quindi puoi convertire il tutto facilmente in ore, minuti e secondi

class Contatore
{
private System.Timers.Timer ClockControllore;
private double numero=0;

public Contatore()
{
ClockControllore = new System.Timers.Timer(5000); // 5 secondi
ClockControllore.AutoReset = true;
ClockControllore.Elapsed += Verifica;
ClockControllore.Start();
}

private void Verifica(object sender, System.Timers.ElapsedEventArgs e)
{
numero++;
// e qui converti nel formato che vuoi il valore
}

}
--------------------------------------

IDE: Visual Studio 2008 Professional Edition

Fako Profilo | Newbie

Ciao,
scusate e mi intrometto ma ho dei dubbi funzioni, nel senso ch se usi System.timers.timer e provi ad utilizzare eventhandler ELAPSED per inserire nelle label dei valori dovrebbe resitituiri un errore di cross-thread perchè il timer è un thread separato al Form.
Quindi io utilizzerei il delegate per passare il valore del timer alla label:

public partial class Form1 : Form
{

public System.Timers.Timer tmr = new System.Timers.Timer(1000);

public Form1()
{
InitializeComponent();
}


private void Form1_Load(object sender, EventArgs e)
{
tmr.Elapsed += new ElapsedEventHandler(tmr_Elapsed);
tmr.AutoReset = true;

tmr.Start();
}

private void tmr_Elapsed(object sender, ElapsedEventArgs e)
{
this.Invoke(new deleg_timer(timer),new object[]{});
}

public delegate void deleg_timer();

public void timer()
{
this.Text = DateTime.Now.ToString();

}

}

Questo codice stampa sulla barra del form la data e l'ora.
Se al posto di this metti label1 il gioco è fatto.
Non so se ci sono altre vie ma questa funziona sempre.

Ciao,

andreadp Profilo | Junior Member

Si in effetti ho usato i delegate. Sembra essere tutto apposto. Esiste un metodo per tarare il conteggio come era Interval per il timer del form??
Andrea

Fako Profilo | Newbie

si esiste interval:

930x425 20Kb


Ciao,

NotUseless92 Profilo | Newbie

se ti interessa io ho realizzato un orologio analogico in c#...

ecco parte del codice che ho usato:

string ora, data; int decimi, secondi, minuti, ore; private void Form1_Load(object sender, EventArgs e) { ora = DateTime.Now.TimeOfDay.ToString(); data = DateTime.Today.ToShortDateString(); ore = DateTime.Now.Hour; minuti = DateTime.Now.Minute; secondi = DateTime.Now.Second; timerClick(this, null); timer1.Interval = 100; timer1.Start(); } private void timerClick(object sender, EventArgs e) { decimi++; if (decimi % 10 == 0) { decimi = 0; secondi++; if (secondi % 60 == 0) { secondi = 0; minuti++; if (minuti % 60 == 0) { minuti = 0; ore++; if (ore % 24 == 0) { ore = 0; } } } } if (ore < 10) lblOre.Text = "0" + ore + ":"; else lblOre.Text = ore.ToString() + ":"; if (minuti < 10) lblMinuti.Text = "0" + minuti + ":"; else lblMinuti.Text = minuti.ToString() + ":"; if (secondi < 10) lblSecondi.Text = "0" + secondi; else lblSecondi.Text = secondi.ToString(); Invalidate(); }

se hai pazienza posterò nel mio blog tutto il progetto...(tra oggi e domani, il link è quello della mia firma! )
http://myapp-csharp.blogspot.com

NotUseless92 Profilo | Newbie

Pubblicato!
Ecco il link!
http://myapp-csharp.blogspot.com/2010/08/progetto-realizzare-un-semplice.html

spero ti sia d'aiuto...
http://myapp-csharp.blogspot.com
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5