尝试让多个线程使用 capture.QueryFrame() 获取帧

Trying to get multiple threads to get frames with capture.QueryFrame()

所以我有一个主要 class 从我的网络摄像头获取帧和处理帧的多个线程。我已经锁定了 main class 从 cam 抓取帧的部分,因此只有一个线程可以处理同一帧。现在我收到一个外部异常,我不知道为什么。 我的主要 class:

public Image<Bgr, byte> GetImage()
{
    Image<Bgr, byte> returnable;
    Mat f = null;
    lock (locker)
    {
       do
       {
            f = capture.QueryFrame();
        } while (!capture.Grab());
        returnable = f.ToImage<Bgr, byte>();
    }
    return returnable;
}

我的帖子:

Image<Bgr,byte> image;
image = o.GetImage(); //o is the main class
Image imag = image.ToBitmap();
string savePath = path + rofNumber + "/Original.jpg";
imag.Save(savePath); //Exception is on this line
toFind = o.GetNumbersFromDatabase();
labels = FindLabels(image);

异常:

System.Runtime.InteropServices.ExternalException was unhandled
ErrorCode=-2147467259
HResult=-2147467259
Message=Er is een algemene fout opgetreden in GDI+.
Source=System.Drawing
StackTrace:
   bij System.Drawing.Image.Save(String filename, ImageCodecInfo encoder,    EncoderParameters encoderParams)
   bij OCR.Worker.Run() in C:\Users\...\Code\Visual Studio\OCR\OCR\Worker.cs:regel 178
   bij System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   bij System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   bij System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   bij System.Threading.ThreadHelper.ThreadStart()
InnerException: 

我自己发现了问题。 由于我正在使用多个线程,因此在保存图像时我应该更加谨慎。

问题是其中一个线程正在保存图像,但在完成之前,另一个线程开始保存到同一个文件,这导致了错误。

我首先尝试这个的原因是为了获得相机画面的小型幻灯片。

结论:

我为每个线程使用了不同的名称来保存图像!

最后我自己解决了这个问题,但我了解到我需要对多线程非常谨慎...