У меня есть камера, и я считываю изображения в реальном времени в массив. Я применяю какой-то алгоритм к изображению и показываю его. Затем я получаю следующее изображение и тоже показываю его. Поэтому я транслирую изображения с камеры на дисплей. Однако я также хочу сохранять изображения на жесткий диск после их отображения. Я пробовал использовать основной поток, но все сильно замедлилось. Затем я попытался использовать ThreadPool (см. Код ниже). Это не замедляет отображение, но я обнаружил, что изображения не сохраняются должным образом. Похоже, что они расположены не в ожидаемом порядке, и после сохранения примерно 50 изображений данные последующих изображений выглядят искаженными. Я предполагаю, что запускается слишком много потоков.
Есть ли лучший способ сделать это? Я думаю, мне нужен только один поток для сохранения изображений. Может быть какая-то очередь, сохраняющая каждое изображение последовательно. Пока это делается в фоновом режиме и не замедляет отображение. Если бы кто-то мог опубликовать фрагмент кода, это было бы фантастически.
short[] image1 = new short[20000];
while(streaming)
{
ReadImageFromCamera(ref image1)
ImageData data;
data.fileName = imageNumber;
data.image = image1;
ThreadPool.QueueUserWorkItem(WriteImageToFile, data); // Send the writes to the queue
}
private void WriteImageToFile(object imageData) {
try {
ImageData data = (ImageData)imageData;
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
string fName = myDirectory + @"/" + Convert.ToString(data.fileName) + @".spe";
using (Stream myStream = new FileStream(fName, FileMode.Create)) {
bf.Serialize(myStream, data.image);
}
}
catch (Exception) { }
}