예제 #1
0
 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();
 }
예제 #2
0
        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;
                }
            }
        }