Mam timer, który nie musi przetwarzać swojej obsługi zdarzeń w tym samym czasie. Lecz przetworzenie jednego Elimowanego zdarzenia może spowodować zakłócenie działania innych. Zaimplementowałem poniższe rozwiązanie, ale coś jest nie tak; wydaje się, że albo powinienem używać zegara inaczej, albo użyć innego obiektu w przestrzeni wątków. Czasomierz wydawał się najlepiej pasować, ponieważ muszę okresowo sprawdzać stan, ale czasami sprawdzanie trwa dłużej niż mój interwał. Czy to najlepszy sposób podejścia do tego?Jak zablokować licznik czasu podczas przetwarzania zdarzenia, które minęło?
// 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();
}
}
}
To nie powinno być wspólnotowe wiki. – Samuel
@Samuel - każde pytanie może być wiki społeczności, jeśli plakat jest pożądany. Najczęściej zadawane pytania określają tylko, że niektóre pytania powinny od początku stanowić wiki społecznościowe, ale nie ograniczają stosowania CW do jakichkolwiek pytań. – tvanfosson
@tvanfosson: Dałem mu do zrozumienia, że takie pytania nie powinny być wspólnotową wiki. – Samuel