Ciao.
Se l'operazione da eseguire ogni ciclo ci impiega meno della frequenza del timer, propongo una cosa simile.
Codice:
static void Main(string[] args)
{
var simpleSemaphore=new ManualResetEvent(false);
var tickingTimer = new Timer(200);
tickingTimer.Elapsed += (s, e) => simpleSemaphore.Set();
tickingTimer.Start();
foreach(char ch in "StringaDiEsempio")
{
Console.Write(ch);
simpleSemaphore.WaitOne();
simpleSemaphore.Reset();
}
Console.ReadKey();
}
Sconsiglio di eseguire il loop su un risultato di database remoto.
Meglio invece ottenere tutto il risultato in locale, e poi effettuare il loop sulla copia locale.
Questo per liberare il database il piu' velocemente possibile, ed evitare lock magari non voluti (e rallentare se non fare fallire altri processi)
Da ignorarsi se l'implementazione si basa su database sconnessi.