首页 新闻 会员 周边

在多线程中使用Application.Run()导致线程不断增加,最后内存溢出

0
悬赏园豆:5 [已关闭问题] 关闭于 2016-04-12 15:03

问题:

与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的主页 Sam Lin | 初学一级 | 园豆:146
提问于:2016-04-08 14:57
< >
分享
所有回答(2)
0

其实很简单,那个执行代码段 你为什么非要用一个线程将它包裹起来呢?你把包裹的线程去掉就可以了。

需要格局 | 园豆:2145 (老鸟四级) | 2016-04-08 17:13

不使用线程会造成主界面卡顿影响界面操作

支持(0) 反对(0) Sam Lin | 园豆:146 (初学一级) | 2016-04-08 17:15

@Sam Lin:哈哈 主界面卡钝 和线程没有关系的。和异步有关系,

请 参阅 winform如何使用Invoke 来避免界面卡钝

支持(0) 反对(0) 需要格局 | 园豆:2145 (老鸟四级) | 2016-04-08 17:17

@田麦成: 谢谢你的回答,我这并非基于UI上的线程

支持(0) 反对(0) Sam Lin | 园豆:146 (初学一级) | 2016-04-11 14:33
0

已与厂家联系,更新相关的dll即可~

Sam Lin | 园豆:146 (初学一级) | 2016-04-12 15:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册