位图 - ArgumentException:“参数无效。”(间歇性)

时间:2016-01-19 09:42:26

标签: c# .net graphics bitmap argumentexception

我正在使用简单的库来使用我的网络摄像头(使用Aforge.net)。目前我正在创建从相机中获取单张照片的方法。以下是我的代码示例:

private Bitmap img = new Bitmap(10,10);

// start camera
public void StartCam( int ind)
{
    cam = new VideoCaptureDevice(videoDevices[ind].MonikerString);
    cam.NewFrame += new NewFrameEventHandler(cam_NewFrame);
    cam.Start();
}

// new frame event
void cam_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
   lock (img)
   {
       if (img != null)
           img.Dispose();
       img = (Bitmap)eventArgs.Frame.Clone();
   }
}

// return picture method
public Bitmap MakePicture()
{
   return new Bitmap(img);
}

我的问题是我不时会在此行中ArgumentException was Unhandled - Parameter was Invalid return new Bitmap(img);

但是在异常时img似乎没问题,简单的位图640x480(不是那么大)。我一直在网上搜索,发现它可能是一些内存问题(我是32位),但是当发生这种情况时我的整个过程不会超过150MB。

你知道是什么原因造成这种情况以及如何避免这种情况吗?

感谢您的帮助!

编辑:

  • lock不是问题 - 如果没有它也会发生
  • img in not null
  • put Thread.Sleep() img.Dispose()之后我也得到了这个ArgumentException,但这次我真的可以在监视列表中看到所有img参数都是无效的......
  • 当我在这里遇到的代码发生这种情况时,ArgumentException:“参数无效。”被提出但看着img似乎一切正常......我现在唯一想到的就是那个当我在其他线程中处理时,我正在调用img。但我不知道如何防止这种情况发生。

1 个答案:

答案 0 :(得分:1)

有时调试器可能是错误的(即使不太可能)。你试过addind一个空检查只是为了谨慎吗?

// return picture method
public Bitmap MakePicture()
{
    Bitmap res = null;
    if (img != null)
        res = new Bitmap(img);
    return res;
}

但我不认为这是问题所在。我敢打赌你的img对象在你调用MakePicture()方法时被锁定了。 您可以尝试通过在锁内添加thread.Sleep()来重现此操作。如果问题实际上来自锁,您可能想要使用不同的模式。