线程-emgucv Caputre类在打开摄像头的情况下,关闭子窗口,会产生中断错误

问题描述

emgucv Caputre类在打开摄像头的情况下,关闭子窗口,会产生中断错误
这是子窗口关闭时,调用的代码

        private void VideoWnd_FormClosing(object sender FormClosingEventArgs e)        {            capture.Pause();            capture.Stop();           for(int i=0;i<999999999;i++)            {                if (capture._grabState == Emgu.CV.Capture.GrabState.Stopped)                    capture.Dispose();            }        }

修改Capture类的结构体,查看_grabState字段始终未stopping状态

下面为Capture类中线程运行代码

 private void Run()        {            try            {                while (_grabState == GrabState.Running || _grabState == GrabState.Pause)                {                    if (_grabState == GrabState.Pause)                    {                        _pauseEvent.WaitOne();                    }                    else if (IntPtr.Zero.Equals(_ptr) || !Grab())                        {                        //capture has been released or                        //no more frames to grab this is the end of the stream.                         //We should stop.                        _grabState = GrabState.Stopping;                    }                }            }            catch (Exception e)            {                throw new Exception(""Capture error"" e);            }            finally            {                _grabState = GrabState.Stopped;            }        }

在子窗口中添加按钮,关闭摄像头能够正常工作。
在摄像头打开的情况下,直接点击关闭按钮,无论怎样都会产生catch错误,
错误为:引用已经释放的对象,ImageBox

1.理论上不是我在VideoWnd_FormClosing事件中调用了capture.stop()方法,线程不就应该调用finally中的代码么,但是直到for循环结束,线程都没有调用。不知道为什么

解决方案

http://bbs.csdn.net/topics/390768910

时间: 2024-08-29 10:45:02

线程-emgucv Caputre类在打开摄像头的情况下,关闭子窗口,会产生中断错误的相关文章

linux-Linux下使用opencv打开摄像头后无法彻底关闭摄像头

问题描述 Linux下使用opencv打开摄像头后无法彻底关闭摄像头 Linux下使用opencv调用cvCreateCameraCapture打开摄像头后,使用cvReleaseCapture无法彻底关闭摄像头,摄像头上的灯还亮着.只有退出程序才能关闭.如果不退出的话,再次调用cvCreateCameraCapture后就无法获取图像,出现 VIDIOC_STREAMON: 错误的文件描述符.初次接触opencv,不是很了解. 解决方案 ubuntu下使用OpenCV打开摄像头opencv打开

qt-QT中使用opencv打开摄像头

问题描述 QT中使用opencv打开摄像头 我是按照一篇帖子上写的编得一个打开摄像头显示视频的程序,但是不知道为什么显示错误 解决方案 解决方案二:

重新打开子窗口,里面的信息还在

问题描述 我使用java做课程设计图书管理系统,建立一个主窗口,然后点击上面的书籍搜索按钮,弹出一个窗口进行图书搜索,然后关闭子窗口.再次打开这个窗口的时候,上面显示的还是上次我进行搜索过的信息.求高手帮助,因为我的代码实在太过于庞大,所以只能这么描述一下了.拜托大家了,真的有点着急了. 解决方案 解决方案二:你所谓关闭子窗口是否只是setVisible(false)?之后你再次打开是setVisible(true)这样子肯定是保持上次状态嘛你关闭的时候直接把这个窗口dispose()掉之后打开

C#二次打开摄像头无图像,无异常,求帮忙!

问题描述 代码是这样的..publicForm1(){InitializeComponent();}//声明视频类cVideovideo;//打开视频privatevoidbutton1_Click(objectsender,EventArgse){btnPlay.Enabled=false;btnStop.Enabled=true;btnPz.Enabled=true;video=newcVideo(pictureBox1.Handle,pictureBox1.Width,pictureBox

在win7中设置怎样打开摄像头

  Windows7是一款非常不错的操作系统,在功能和用户体验上都非常不错,很多人都安装了windows7,体验一下最新操作系统带来的最新感受.但是不少朋友会发现,在安装好windows7接上摄像头后,在"我的电脑"中看不到摄像头的图标了,之前在windows xp系统中,"我的电脑"中会有一个摄像头 的图标,用户可以直接双击打开这个图标使摄像头工作.这并不是系统有什么问题,而是包括Vista在内,windows中的"Windows Image Acqui

解决无法打开摄像头 提示“未能创建视频预览,请检查设备连接”

有些朋友可能遇见过在"我的电脑"上打开摄像头的时候提示"未能创建视频预览,请检查设备连接",但是却可以通过QQ视频,这是怎么回事呢?如何解决? 查杀病毒 一般遇到此类问题,首先对电脑进行杀毒,如果是病毒导致文件损坏,需查杀病毒后对文件进行修复,避免"治标不治本". 更新摄像头驱动 摄像头驱动文件损坏会导致这问题,用户可到官网下载驱动精灵或者驱动人生,更新一下摄像头驱动即可解决. 检查WIA是否启动服务 打开控制面板---管理工具---服务---查

未能创建视频预览,请检查设备连接 无法打开摄像头

有些朋友可能遇见过在"我的电脑"上打开摄像头的时候提示"未能创建视频预览,请检查设备连接",但是却可以通过QQ视频,这是怎么回事呢?如何解决? 查杀病毒 一般遇到此类问题,首先对电脑进行杀毒,如果是病毒导致文件损坏,需查杀病毒后对文件进行修复,避免"治标不治本". 更新摄像头驱动 摄像头驱动文件损坏会导致这问题,用户可到官网下载驱动精灵或者驱动人生,更新一下摄像头驱动即可解决. 检查WIA是否启动服务 打开控制面板---管理工具---服务---查

Win7笔记本打开摄像头提示“摄像头被占用”如何解决

  Win7笔记本打开摄像头提示"摄像头被占用"如何解决         具体方法如下: 解决方法1: 1. 查看设备管理器,在图像设备中,看是否有ThinkVantage Virtual Camera,如果有,禁用该设备或者卸除; 2.如果用户使用过QQ聊天,建议打开QQ与某人的聊天窗口,选择摄像头旁边的小三角,选择"视频设置",在视频设备中会有三个可选.选择Camera Pius 或者Virtual Camera,不要选择"Integrated Cam

Win7笔记本如何打开摄像头

  第一种方法,官方软件打开. 1.检测摄像头驱动是否正常安装. 右击计算机,点击管理进入计算机的管理界面,选择设备管理器,查看里面的摄像头驱动是否已经安装并正常运行. 2.下载安装官方软件. 电脑一般都会安装好相应的驱动了,只不过还没有相应的软件的支持,如果你的电脑是正版系统的话,那么这些都会带着,如果不是,需要自己到官网去下载安装.以联想为例(YouCam). 3.点击软件即可打开笔记本自带的摄像头. 安装完成后自动生成一个快捷方式,双击快捷方式即可打开摄像头. 第二种方法,360魔法摄像头