View Full Version : [C#] Applicare un Timer su Foreach()
Salve,
come posso applicare un Timer su un ciclo tipo:
foreach(DataRow dr in myDataTable.Rows)
{
//deve fare un Loop ogni Tick del Timer, fino a che non finiscono le Rows del DataTable
}
grazie mille !!
Ciao.
Se l'operazione da eseguire ogni ciclo ci impiega meno della frequenza del timer, propongo una cosa simile.
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.
ziggy1979
02-03-2011, 08:39
Purtroppo continua a sfuggirmi il motivo della tua domanda... cosa devi fare di preciso?
Mi sfugge il perchè devi, per ogni ciclo, aspettare il timer per lavorare!
Devo inviare 10000 Newsletter, non voglio inviare 5 e-mail al secondo perceh rientro nello Spam, e quindi vorrei limitare a circa 1 e-mail al secondo o 1 ogni 2 secondi, tutto qua.
banryu79
02-03-2011, 13:51
Devo inviare 10000 Newsletter, non voglio inviare 5 e-mail al secondo perceh rientro nello Spam, e quindi vorrei limitare a circa 1 e-mail al secondo o 1 ogni 2 secondi, tutto qua.
Allora penso sia sufficiente mandare in sleep il thread corrente per 1 sec. circa (o comunque per l'intervallo di tempo scelto), dentro al ciclo, dopo aver inviato la mail.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.