问题:
与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); } Application.Run(); //新加代码,后是可以正常订阅事件 }); th.IsBackground = true; th.Start();
在线程中添加Application.Run()会导致线程不被回收继而不断增加线程数量,最终导致“System.OutOfMemoryException”的异常。
提示:如果不添加Application.Run(),又无法注册到COM组件的事件
提问各大侠该问题如何处理?
谢谢 :)
同时您也可以查看更加详细的描述:http://www.cnblogs.com/samlin/p/5368097.html
其实很简单,那个执行代码段 你为什么非要用一个线程将它包裹起来呢?你把包裹的线程去掉就可以了。
不使用线程会造成主界面卡顿影响界面操作
@Sam Lin:哈哈 主界面卡钝 和线程没有关系的。和异步有关系,
请 参阅 winform如何使用Invoke 来避免界面卡钝
@田麦成: 谢谢你的回答,我这并非基于UI上的线程
已与厂家联系,更新相关的dll即可~