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,又掉坑了,看看怎么解决吧

上一篇:功率变送器在造纸磨浆机控制系统中的应用


下一篇:如何推送PLC报警消息至微信