解决方案 »

  1.   

    Del_GetStatus中,在if (result.IsCompleted)时,递归了,造成死循环
      

  2.   

    我是想通过线程来循环获取PLC返回的状态信息。
      

  3.   


    我是想通过线程来循环获取PLC返回的状态信息。
    PLC是什么PLC,开放协议还是需要SDK,还是利用OPC?
    不管通信手段用的是什么,你要做的应该是线程循环去通信,然后显示,就这么简单.
    用委托不过是线程想对UI操作,没那么复杂.
    不会递归就尽量别用,while循环能搞定的问题,用了递归你自己把自己绕进去了.
      

  4.   

    想无限循环执行记得用while
    递归是遍历的时候用的,不是用来让你一直不断重复执行同一个代码的.
    你每递归一次,程序就实例化一个新的函数,无限循环内存就溢出了.不爱用while,你直接goto到函数开始的地方也行啊.
    不要让它从最外面再进来一次了.
      

  5.   


    我是想通过线程来循环获取PLC返回的状态信息。
    PLC是什么PLC,开放协议还是需要SDK,还是利用OPC?
    不管通信手段用的是什么,你要做的应该是线程循环去通信,然后显示,就这么简单.
    用委托不过是线程想对UI操作,没那么复杂.
    不会递归就尽量别用,while循环能搞定的问题,用了递归你自己把自己绕进去了.嗯,你说的有道理,我确实把一个简单的问题复杂化了。
      

  6.   

    之前我也用while的,不知道自己怎么想的,想用委托来异步调用,之后就绕进去了。谢谢 @Z65443344   
      

  7.   

    委托异步调用不是这么调用的.
    你需要在每次发送完指令,等待数据返回的时候,订阅一个受到数据的事件
    这样程序就不用继续等了,有数据返回就开始执行数据处理的逻辑.
    处理完再次发送数据,再次订阅事件.你现在全程sleep,根本是同步阻塞,不管是while循环还是自己调用自己,都是按顺序在跑,没有脱离等待的过程.