我想做一个循环,定时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,又掉坑了,看看怎么解决吧