Tengo un temporizador que no necesita procesar su manejador de eventos transcurrido al mismo tiempo. Pero procesar un evento transcurrido puede interferir con otros. Implementé la solución a continuación, pero algo parece estar mal; parece que debería usar el temporizador de forma diferente o usar otro objeto dentro del espacio de enhebrado. El cronómetro pareció encajar mejor porque necesito verificar periódicamente el estado, pero a veces la verificación tomará más tiempo que mi intervalo. ¿Es esta la mejor manera de abordar esto?¿Cómo bloquear un temporizador mientras se procesa el evento transcurrido?
// member variable
private static readonly object timerLock = new object();
private bool found = false;
// elsewhere
timer.Interval = TimeSpan.FromSeconds(5).TotalMilliseconds;
timer.Elapsed = Timer_OnElapsed;
timer.Start();
public void Timer_OnElapsed(object sender, ElapsedEventArgs e)
{
lock(timerLock)
{
if (!found)
{
found = LookForItWhichMightTakeALongTime();
}
}
}
Esto no debería haber sido una wiki de la comunidad. – Samuel
@Samuel: cualquier pregunta puede ser wiki de la comunidad si el póster lo desea. Las preguntas frecuentes solo especifican que algunas preguntas deben ser wiki de la comunidad desde el principio, pero no restringen la aplicación de CW a ninguna pregunta. – tvanfosson
@tvanfosson: Le estaba haciendo saber que preguntas como estas no deberían ser wiki de la comunidad. – Samuel