解决方案 »

  1.   

    而且这个问题最麻烦的一点就是:没法调试
    我在自己电脑上怎么跑,它就是不窜
    放到生产环境里去,通过VPN远程观察,经过一段时间之后就窜了
    虽然从Unity3D里看不出收到的数据错乱,但是datagridview里显示错乱,实际的datatable应该还是错乱了
      

  2.   

    更新"OPC值"这一列,只有一个地方,就是读OPC的回调函数里
    而更新"OPC旧值"也只有一个地方,就是客户端请求最新的数据时,比较"OPC值"和"OPC旧值"如果有不同,把数据发送到客户端,同时用"OPC值"更新"OPC旧值"
    其他列,是只读不写的,而且不存在多线程向同一行同一列里写入的情况
      

  3.   

    读取OPC是开了一个线程,一直死循环+sleep去请求数据,然后通过回调函数取值
    而TCP是异步侦听,虽然没有显式的使用线程,应该也是另起线程操作的
    加上主线程,一共3个线程
      

  4.   

    可能会有问题吧,比如说 DataTable 按行标记是否已经被修改过,每一行有一个状态
    写操作必须同步,这个还是要遵守的
      

  5.   

    要加锁,刚才我举那个例子就是,如果操作同一行的不同列,他们都影响了这一行的状态(同一个值)
    谢谢,这样我就清楚了
    不能把datatable当二维数组
    我还是老老实实每个地方都加锁就好了