Date uno sguardo a questo codice:
class Program
{
//dichiaro un contatore
public static int TimeElapsed=0;
static void Main(string[] args)
{
//istanzio un timer, lo imposto a 1 millisecondo e lo
//faccio partire immediatamente
TimerCallback tc = new TimerCallback(Elapsed);
Timer t = new Timer(tc, null, 0, 1);
Thread.Sleep(1000);
//scrivo il risultato del contatore
Console.WriteLine(TimeElapsed.ToString());
Console.ReadLine();
}
//funzione choamata ad ogni tick del timer
public static void Elapsed(object sender)
{
TimeElapsed++;
}
}
Nulla di complesso vero?? Eppure il valore del contatore al momento della WriteLine è di circa 65 quando mi aspetterei 1000 e rotti...
Visto che il timer e la sleep lavorano in millisecondi, sapete dirmi perchè dopo la sleep il contatore và avanti di così poco?
Ho provato anche questo ma il risultato non cambia!!
class Program
{
public static int TimeElapsed=0;
public static bool Done = false;
static void Main(string[] args)
{
TimerCallback tc = new TimerCallback(Elapsed);
Timer t = new Timer(tc, null, 0, 1);
System.Timers.Timer St = new System.Timers.Timer();
St.Interval = 1000;
St.Elapsed+=new System.Timers.ElapsedEventHandler(St_Elapsed);
St.Start();
while (!Done)
{
Thread.Sleep(10);
}
Console.WriteLine(TimeElapsed.ToString());
Console.ReadLine();
}
public static void St_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
Done = true;
}
public static void Elapsed(object sender)
{
TimeElapsed++;
}
}