大家好,领导要用C#编写一个ZigBee无线网络环境监测系统 --串口编程。
这个网络最多有64个节点,还有一个协调器,节点的数据都传到协调器,协调器通过串口与计算机相连,把数据发过来。系统要求能实时显示每个节点的强度数据,还要画图。
我没弄过C#,不明白该怎么设计这个系统。下面是我的思路,麻烦大家看看合不合理:
线程A专门用来接收串口数据,检查数据合法性,如果数据完整,即传给另外一个线程B,线程B专门用来解析数据,存入数据库,然后把该数据发给相应的节点线程1~64问题在于,节点列表在左边,领导希望点击某个节点,则在右边有相应的tab出现,然后就开始显示该节点的数据。
我是不是要预先定义64个tabPage,而且每个tabPage都有自己的backgroundWork来处理数据并且更新UI?还是没有打开的tabPage就没有backgroundWork? 还是所有的tabPage共用一个backgroundWork来更新所有UI呢?麻烦大家不吝赐教,非常感激

解决方案 »

  1.   

    定义64个tabpage,简单.
    一个串口用2到3个线程就行
    共用一个backgroundWork来更新UI.
      

  2.   

    因为你所有的tabPage的处理方式都是相同的,所以没有必要开启那么多线程。
    定义一个节点类,这个类和tabPage的布局相关,你可以实例化64个对象,更换节点时更换和tabPage关联的对象。
    最好也别用64个节点线程,节点类只负责存放和组织数据就可以了。
      

  3.   


    我现在的作法是定义一个tabPage类,这个类里面包括了布局和backgroudWork,点击节点则生成该tabPage的对象(该对象我缓存了,需要吗?),这样子同时也生成了一个backgroundWork线程,该线程更新该tabPage上的UI。
    因为缓存,所以表面关掉tab,实际上后台还在。所以最多时候有该tabPage的64个对象,每个对象又有一个backgroundWork。我不知道这样子会不会有很大的性能影响,是不是关掉tab时候就把该tabPage对象销毁掉?
      

  4.   


    那这样子的话,backgroundWork线程是不属于tabPage的。
    一个backgroundWork同时更新最多64个tabPage对象,效率上会不会很差,实时效果不好?
    还是backgroundWork只更新活动的tabPage呢?这个又怎么做到当新的tabPage打开时,backgroundWork知道应该更新这个新开的tab,而关掉原来的tab呢?还是需要同时更新所有tabPage呢?
      

  5.   


    还有一个问题,就是我那些串口处理线程backgroundWork怎么通知tabPage里面的backgroundWork说有数据要显示呢?
    我是想在主窗口里面起一个线程来监听串口的,然后由另外一个线程分发不同节点的消息传给不同的tabPage进行更新UI的,但是我还是不知道主窗口数据分发线程怎么来通知tabPage实例里的线程的