标签:thread timer 循环 plc new 线程 随笔 winform
我想做一个循环,定时100ms读取plc数据,并且根据读取的数据执行相应的方法
1、我首先使用了timer计时器
timer计时器定时轮询plc,轮询时间设置的100ms,但是界面很卡无法操作界面了,使用体验很差,所以从我使用角度来说我选择弃用这种方法。
2、那就换个新线程吧,省的卡界面
new thread(()=>{
while(true){
方法1,
方法2,
。。。}
thread.sleep(100)
}).start();
刚刚开始用的时候觉得,哎,这不就好了,小事儿了吧。哎?运行了一段时间怎么程序卡死了?
啥情况,搞呀搞,写了几句检测一下线程数量,发现线程数量一直在增长,咋回事儿,
妹的发现测试的时候没有条件和MES通讯所以线程一直在等着然后task隔一段时间又开一个线程等着,越等越多,我和程序崩溃了等等党终于胜利了
直接丢给委托放在新线程里执行吧
new thread(()=>{
action.begininvoke(null,null);
}).start();
好像运行的还可以哦,过了一段时间检查一下,哎?我PLC信号过来了咋没有反应啊,又加了个字段显示循环的次数,刚开始好好地,
就在我触发了plc用户登录的时候循环次数不增加了,我的while(true)跳出来了?我查了一下日志发现走到给MES发信息就没下文了,mes没连啊,没有回复啊,啊啊啊,又等在这里了?我崩溃。
继续搞继续搞,还得多学习!
用着用着发现有时候好好地怎么突然PLC数据写了也没有反应了,WOC,又掉坑了,看看怎么解决吧
标签:thread,timer,循环,plc,new,线程,随笔,winform 来源: https://www.cnblogs.com/a-cup-of-lemon-tea/p/15828847.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。