public void UpdateTimer(int intervalSec, int durationMin) { DisposeTimer(); watchTimer = new Timer(); watchTimer.Interval = intervalSec * 1000; watchTimer.Tick += (s, e) => { if (!Watching) { return; } reduceImageBuffer(durationMin * 60); HistoryImageItem item = new HistoryImageItem(); using (MemoryStream ms = new MemoryStream()) { using (Bitmap bmp = CaptureBitmap()) { bmp.Save(ms, ImageFormat.Png); item.ImageBytes = ms.GetBuffer(); } } item.Timestamp = DateTime.Now; imageQueue.Enqueue(item); }; watchTimer.Start(); }
private void reduceImageBuffer(int duration) { DateTime now = DateTime.Now; while (imageQueue.Count > 0) { HistoryImageItem item = imageQueue.Peek(); if ((now - item.Timestamp).TotalSeconds > duration) { imageQueue.Dequeue(); } else { break; } } }