c# ActiveX 手动申请,释放资源
2016-06-23 15:50
633 查看
利用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,只要点击刷新,或者关闭标签页,就可以重新打开摄像头。
遇到些问题总结如下:
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,只要点击刷新,或者关闭标签页,就可以重新打开摄像头。
相关文章推荐
- OCX打包成CAB包以及签名发布
- c#调用COM组件
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#实现给图片加水印的方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#中的delegate委托类型基本学习教程
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- 举例讲解C#中自动实现的属性
- C#中this的用法集锦
- C#数据结构之顺序表(SeqList)实例详解
- C#.NET获取拨号连接的宽带连接方法
- C#异步绑定数据实现方法
- C#实现AddRange为数组添加多个元素的方法
- C#中Equality和Identity浅析