中控考勤仪IFace302多线程操作时无法订阅事件
场景:
在各办事点安装中控考勤仪Iface302,各办事点的工作人员上下班报到时使用指纹或面纹进行自动登记,验证成功后将与服务吕进行通讯记录相关的考勤信息。
条件限制:
由于Iface302设备不支持自动连接功能,也因此需要在服务器中定时地、主动地去轮询各办事点的连接状况。
问题一:
与IFace302通讯主要通过厂家对COM组件封装的dll二次开发,在线程环境的状态下无法订立考勤的事件,验证事件,类似的代码如下:
zkemkeeper.CZKEMClass zkDevice = new zkemkeeper.CZKEMClass(); Thread th = new Thread((ThreadStart)delegate()
{
_isConnected = zkDevice.Connect_Net(_deviceip, _deviceport); if (_isConnected == true)
{
//连接成功后才能注册
//如果断开后事件也自然失效
if (zkDevice.RegEvent(1, 65535))//Here you can register the realtime events that you want to be triggered(the parameters 65535 means registering all)
{ zkDevice.OnFinger += new zkemkeeper._IZKEMEvents_OnFingerEventHandler(zkDevice_OnFinger); }
});
th.IsBackground = true;
th.Start();
此代码是可以正常运行但无法注册事件,而如果不使用线程每次调用COM组件的方法都是有一段时间的阻塞。
问题二:
经了解,博客园有人提出在线程中增加 Application.Run();代码可以解决无法订阅事件的问题,即:
zkemkeeper.CZKEMClass zkDevice = new zkemkeeper.CZKEMClass(); Thread th = new Thread((ThreadStart)delegate()
{
_isConnected = zkDevice.Connect_Net(_deviceip, _deviceport); if (_isConnected == true)
{
//连接成功后才能注册
//如果断开后事件也自然失效
if (zkDevice.RegEvent(1, 65535))//Here you can register the realtime events that you want to be triggered(the parameters 65535 means registering all)
{ zkDevice.OnFinger += new zkemkeeper._IZKEMEvents_OnFingerEventHandler(zkDevice_OnFinger); }
Application.Run(); //新加代码,后是可以正常订阅事件
});
th.IsBackground = true;
th.Start();
在代码最后加上Application.Run()的确是可以解决无法订阅事件的问题,但当程序运行一段时间后就会出现System.OutOfMemoryException: 引发类型为“System.OutOfMemoryException”的异常。
由于是几个小时才出现的内存溢出异常,通过观察任务管理器可以发现以下问题:
在多线程中使用Application.Run()方法会导致到内存使用、虚拟内存大小、页面缓冲池、线程数是不断地增加
最终导致“System.OutOfMemoryException”的异常。
嘀咕几句:
在这里再次吐槽一下中控科技的售后服务极差,反复打了N次电话均无法连通,在官网留言亦无任何反馈。
寻求帮助:
各同行该问题如何解决呢?
中控考勤仪IFace302多线程操作时无法订阅事件的更多相关文章
- 添加浏览器back操作时的响应事件
https://blog.csdn.net/xcqingfeng/article/details/70800118 $(function(){ pushHistory(); window.addEve ...
- C#中级-常用多线程操作(持续更新)
一.前言 多线程操作一直是编程的常用操作,掌握好基本的操作可以让程序运行的更加有效.本文不求大而全,只是将我自己工作中常常用到的多线程操作做个分类和总结.平时记性不好的时候还能看看.本文参 ...
- java多线程操作
进程是程序的一次动态的执行过程,它经历了从代码加载.执行完毕的一个完整过程,这个过程也是进程本身从产生.发展到最终消亡的过程. 多线程是实现并发机制的一种有效的手段.进程和线程一样,都是实现并发的一个 ...
- CoreData和SQLite多线程访问时的线程安全
关于CoreData和SQLite多线程访问时的线程安全问题 数据库读取操作一般都是多线程访问的.在对数据进行读取时,我们要保证其当前状态不能被修改,即读取时加锁,否则就会出现数据错误混乱.IOS中常 ...
- MFC的多线程操作
记得用MFC做了一个图像自动修复软件,当时没有多线程操作这一概念,由于图像修复算法比较复杂,因此,当执行图像修复时,程序就像卡死了似得而不能做其他操作.其实MFC对这种情况有一种很好地解决方案,那就是 ...
- C#多线程操作界面控件的解决方案(转)
C#中利用委托实现多线程跨线程操作 - 张小鱼 2010-10-22 08:38 在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常.这是微软为了 ...
- c# BackGroundWorker 多线程操作的小例子
在我们的程序中,经常会有一些耗时较长的运算,为了保证用户体验,不引起界面不响应,我们一般会采用多线程操作,让耗时操作在后台完成,完成后再进行处理或给出提示,在运行中,也会时时去刷新界面上的进度条等显示 ...
- swift语言之多线程操作和操作队列(下)———坚持51天吃掉大象(写技术文章)
欢迎有兴趣的朋友,参与我的美女同事发起的活动<51天吃掉大象>,该美女真的很疯狂,希望和大家一起坚持51天做一件事情,我加入这个队伍,希望坚持51天每天写一篇技术文章.关注她的微信公众号: ...
- C# winform编程中多线程操作控件方法
private void Form1_Load(object sender, EventArgs e) { Thread newthread = new Thread(new ThreadStart( ...
随机推荐
- Maximum length of a table name in MySQL
http://dev.mysql.com/doc/refman/5.7/en/identifiers.html The following table describes the maximum le ...
- 【算法和数据结构】_11_小算法_itoa、ftoa及字符串倒置
[1]main.c /**************************************************** * * 把整数按照进制数转换为相应进制的字符串 *(要考虑符号),比如 ...
- Mdrill 安装部署(单机版)
前期: -------------------------------------------------------- 准备: 1.centos6.5 /7 x86_64(后期会更改主机名称) 2. ...
- 七个结构模式之装饰者模式(Decorator Pattern)
定义: 使用组合的方法,动态给一个类增加一些额外的功能,避免因为使用子类继承而导致类继承结构复杂.并且可以保持和被装饰者同一个抽象接口,从而使客户端透明. 结构图: Component:抽象构件类,定 ...
- 简单可用好实现的 HA 高可用设计
本文为作者原创,如需转载请注明出处. 1. 实现的功能 一主多备,自动选主 启动记录可查询 2. 前置需求 一台数据库用以记录,如 MySQL.Redis.MongoDB 等.关键是设计中的思想,用啥 ...
- 改写百度云推送SDK,PHP PEAR 包:Services_Baidu_Push
iPhone使用apple push很方便,而Android很多厂商删除了google push,而且google在大陆连不上,所以要用别的办法. Android常见的推送服务商有:极光推送(http ...
- 使用 WordPress 主题制作的20个精美网页
WordPress 是一款个人博客系统,并逐步演化成一款内容管理系统软件,它是使用 PHP 语言和 MySQL 数据库开发的.用户可以在支持 PHP 和 MySQL 数据库的服务器上使用自己的博客.这 ...
- JavaScript 事件绑定及深入
一.传统事件绑定的问题 解决覆盖问题,我们可以这样去解决:window.onload = function () { //第一个要执行的事件,会被覆盖 alert(1);};if (typeof wi ...
- Windows安装apache2.4
The primary Windows platform for running Apache 2.4 is Windows 2000 or later. Always obtain and inst ...
- [deviceone开发]-cnodejs论坛移动端App
一. 简介 这个App是利用cnodejs.net的API来实现论坛的移动端,使用了deviceone的官方的js库(github.com/do-js). 从而使代码非常简洁,便于阅读和参考,值得推荐 ...