按资源释放内存

本文关键字:内存 释放 资源 | 更新日期: 2023-09-27 18:37:04

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

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

为此,我认为这可能是因为相机设备,而不是释放它使用的内存。那么,当我单击退出按钮时,如何以编程方式释放它呢?下面是程序的一部分,我在 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();
    }
}

}

按资源释放内存

你扔了一个NullReferenceException,而不是OutOfMemoryException .

检查调用堆栈以查明其来源。你可以调试应用,调试器设置为在引发异常时中断,因此它将在异常发生的位置中断(按 CRTL+D、E 在 VS.NET 中打开异常窗口)。

从您收到的错误来看,我猜您下载了EasyWebCam库。
如果这是正确的,那么这就是我的工作方式:
1. 我在我的机器上安装了讯连科技的Youcam软件。
2. 每当我启动自己的应用程序时,EasyWebCam 库都会检测到机器上的 Youcam 网络拆分器,并提示我选择该驱动程序或默认网络摄像头驱动程序。
3. 我选择了 YouCam 网络拆分器,该应用程序可以正常工作。


在这一点上,出现了另一个障碍:Youcam 进程不会在我的应用程序关闭时终止。
我是如何修复的?
我必须获取Youcam进程并在应用程序窗口即将退出
时对其进行Kill()。这个丑陋的解决方案奏效了。