通过资源释放内存

时间:2012-06-14 09:37:13

标签: c# .net

我在c#中有一个程序,它使用我的本地网络摄像头来捕获和存储图像。我有按钮点击开始,停止,继续等等。当我运行程序时,它在我打开系统后第一次正常工作,但在连续执行相同的事情我得到一个错误(在弹出 - 窗口):

  

捕获视频图像时发生错误。视频捕获现在将终止。对象引用未设置为对象的实例。

我认为这可能是因为相机设备,而不是释放它使用的内存。那么当我点击退出按钮时,如何以编程方式释放它?下面是程序的一部分,我在webcam.start(0)方法中得到错误

命名空间WinFormCharpWebCam {

class WebCam
{

    private WebCamCapture webcam;
    private System.Windows.Forms.PictureBox _FrameImage;
    private int FrameNumber = 30;
    public void InitializeWebCam(ref System.Windows.Forms.PictureBox ImageControl)
    {
        webcam = new WebCamCapture();
        webcam.FrameNumber = ((ulong)(0ul));
        webcam.TimeToCapture_milliseconds = FrameNumber;
        webcam.ImageCaptured += new WebCamCapture.WebCamEventHandler(webcam_ImageCaptured);
        _FrameImage = ImageControl;
    }

    void webcam_ImageCaptured(object source, WebcamEventArgs e)
    {
        _FrameImage.Image = e.WebCamImage;
    }

    public void Start()
    {
        webcam.TimeToCapture_milliseconds = FrameNumber;
        webcam.Start(0); //error pops up when the execution comes to this method

    }

    public void Stop()
    {
        webcam.Stop();

    }

    public void Continue()
    {
        // change the capture time frame
        webcam.TimeToCapture_milliseconds = FrameNumber;

        // resume the video capture from the stop
        webcam.Start(this.webcam.FrameNumber);
    }

    public void ResolutionSetting()
    {
        webcam.Config();
    }

    public void AdvanceSetting()
    {
        webcam.Config2();
    }

}

}

2 个答案:

答案 0 :(得分:1)

您有NullReferenceException投掷,而不是OutOfMemoryException

检查您的调用堆栈以确定其来源。您可以使用调试器设置调试您的应用程序,以便在抛出异常时中断,因此它会在发生异常的地方中断(按CRTL + D,E在VS.NET中打开异常窗口)。

答案 1 :(得分:1)

从你得到的错误中,我猜你下载了EasyWebCam库 如果这是正确的,那么这就是我如何解决它:
1.我在我的机器上安装了Cyber​​link的Youcam软件 2.每当我启动自己的应用程序时,EasyWebCam库都会在机器上检测到Youcam WebSplitter,并提示我选择该驱动程序或默认网络摄像头驱动程序。
3.我选择了YouCam WebSplitter,该应用程序正常运行

此时,又出现了另一个障碍:当我的应用程序关闭时,Youcam进程不会终止 我是如何修理它的? 当我的应用程序窗口即将退出时,我必须得到Youcam进程并杀死它 这个丑陋的解决方案奏效了。