public void ImageWriter() { int frameCount = 0; while (true) { if (Flagged) { _flagId++; System.IO.Directory.CreateDirectory(@"D:\flagged\" + _flagId); CapturedImage[] imageArray = ImageQueue.ToArray(); for (int i = 0; i < imageArray.Length; i++) { CapturedImage image = imageArray[i]; string filePath = string.Format(@"D:\flagged\{0}\{1}.png", _flagId, i.ToString().PadLeft(5, '0')); image.Save(filePath); } Flagged = false; } //keep the last 100 images in the buffer if (ImageQueue.Count > 100) { if (globCaptureStart == DateTime.MinValue) { globCaptureStart = DateTime.Now; } CapturedImage image = ImageQueue.Peek(); if (Recording) { image.Save("D:\\captures\\" + frameCount.ToString().PadLeft(5, '0') + ".png"); frameCount++; } ImageQueue.Dequeue(); image.Dispose(); } Thread.Sleep(1); } }