Próbuję użyć Timer
, aby uruchomić zdarzenie do wysyłania danych w sieci. Stworzyłem prostą klasę do debugowania. Zasadniczo mam List<string>
Chciałbym wysłać. Chcę następujące wydarzy:Wyzeruj System.Timers.Timer, aby zapobiec Ellipemu zdarzeniu
- dodawania ciąg
List
- Zacznij
Timer
przez 10 sekund - Dodaj drugi ciąg
List
przedTimer.Elapsed
- Restart
Timer
z powrotem na 10 sekund.
Do tej pory mam to:
public static List<string> list;
public static Timer timer;
public static bool isWiredUp = false;
public static void Log(string value) {
if (list == null) list = new List<string>();
list.Add(value);
//this does not reset the timer, elapsed still happens 10s after #1
if (timer != null) {
timer = null;
}
timer = new Timer(10000);
timer.Start();
timer.Enabled = true;
timer.AutoReset = false;
if (!isWiredUp) {
timer.Elapsed += new ElapsedEventHandler(SendToServer);
isWiredUp = true;
}
}
static void SendToServer(object sender, ElapsedEventArgs e) {
timer.Enabled = false;
timer.Stop();
}
Jakieś pomysły?
Z pytania Rozumiem, że chce on zgromadzić dane na liście i wysłać je tylko raz po 10 sekundach od ostatniego dodania do listy. Chce uniknąć wywołania SendToServera dwukrotnie, jeśli doda dane do listy dwa razy w odstępie trzech sekund. Mogę się mylić, ale tak to czytam. –
@zespri Dokładnie to czytałem. Dokładnie to robi ten kod. – Servy
nawet przy użyciu licznika czasu. Jest to zły pomysł. Nie ma blokady, żadnej formy synchronizacji. Czasomierz to absolutnie najgorszy sposób na zrobienie tego, powinien rozważyć, jak rozwiązuje ten problem. –