c# ActiveX 手动申请,释放资源

4 篇文章 0 订阅

利用c#做ActiveX控件,ActiveX控件的主要工作是利用Afroge控件打开,关闭usb摄像头,并把图像转成base64传出来。

遇到些问题总结如下:

html调用如下

       <object id="cameraActiveCollect" classid="clsid:f40f171d-f576-4cc2-8293-9b4509091a20" width="400" height="300"></object>
                                  
摄像头打开方法为openCamera(),关闭摄像头closeCamera()
1.刚开始是把摄像头开启,写在了Load事件中。

最初写了简单html调用,发现没有问题,然后集成到大网站中,发现摄像头总是显示is connnecting 状态(利用aforge控件,1个摄像头只能同时打开一次)。

后来在ActiveX中,加入了一些输出,发现html会被加载了两次,研究了一上午也没搞定,为什么会加载两次,只能换个思路。

或者在js中,新建object,或者在js中,手动调用openCamera。

最后采用的方法是在js中手动调用openCamera。js是用的dojo框架,需要把openCamera写在xhrpost返回的事件中,否则会提示控件undefined

 var cameraActiveCollect = document.getElementById("cameraActiveCollect");
                cameraActiveCollect.openCamera();


2.每次用完摄像头,需要把整个ie关闭,才能重新正常打开摄像头,究其原因,是摄像头没有释放操作。在ActiveX中并没有找到dispose事件,只能在页面刷新,或者关闭的时候,手动触发一下closeCamera()

dojo中对应的是 dojo/_base/unload中的addOnUnload事件。

     unload.addOnUnload(function(){
                try{
                    var cameraActiveCollect = document.getElementById("cameraActiveCollect");
                    cameraActiveCollect.closeCamera();
                }
                catch(e){}
            });

或者直接用 window.onbeforeunload也可以。

这样不用整体关闭ie,只要点击刷新,或者关闭标签页,就可以重新打开摄像头。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值