针对测量房间门做监测
门实现两个动作:开,关,默认为开   界面要显示当前门的状态
运行按钮,对应房间内状态,点击运行时,门的状态置为关闭  默认为未运行状态
运行完成按钮 实现多线程监测功能
当程序启动时监测功能就开启
每0.5s查询门的状态,通过多线程来实现
当状态为运行&&门为打开状态时,多线程通过委托时间通知主程序,弹出提示对话框,运行状态转为未运行。

解决方案 »

  1.   

    多线程也可以。
    一个线程专门用来扫描门的开关状态,以及对门的操作。我的感觉是,LZ在提问时的思路很好,多线程,0.5秒的Sleep啊,委托啊,如何显示啊,LZ你的思路真的很清晰啊。如果你在线程或委托或其他方面有点疑惑,可以单独问。这样大家也好帮你解答。
      

  2.   

    除非万不得已,否则不要弄这种timer的代码。这类设计往往出自于一些表面上好像比较喜欢编程,实际上从来没有在大的实际项目中负责任地编程的人之手,这类滥用timer的设计时是非常非常有害的。如果要监控,那么就要在房门实际上打开或者关闭时即时接收它的事件通知或者中断调用,而不是什么碎催地一遍遍每隔0.5s去判断。碎催式的设计,也许一些学生会以为是非常“通用”的一种设计,其实这在实际的工程和产品中是一种非常低级和恶劣的设计,一个产品需要基本的性能,经不起俩两三个这类滥用段时间timer的程序的干扰就会变得用户用起来一卡一卡、用户体验彻底失败了。
      

  3.   

    这类滥用段时间timer的程序的干扰   -->  这类滥用短的中断间隔时间的timer的程序的干扰
      

  4.   

    至于什么“多线程”,你可以看看Timer。使用System.Threading.Timer组件本来就是多线程的,而使用System.Timers.Timer则要看你有没有给它的SynchronizingObject属性赋值。如果赋值了就直接在这个属性所指的控件的线程上执行。比如说你直接将一个System.Timers.Timer拖入窗体,那么vs设计器就会自动把这个属性设置为窗体自己,于是它的事件就默认在窗体线程上抛出了。
    使用Timer就是多线程。如果还搞什么“多线程、Sleep阻塞”作业,那么你们的老师就更让我觉得实在是太害人了。
      

  5.   


    我做过酒店的空调管理,大约300多个监控点,包含灯的开关状态,空调的开关状态,模式,温度.....,用的是TCP/IP协议,多线程,因为空调的处理模块是被动式的,所以我开了个线程去读取每个监控点的状态。真心的请教:
    1)这样做的弊端是什么?
    2)应该采用什么样的程序架构?
    3)12楼Sp1234提到一个“催碎式设计”,我想我属于他说他的“表面喜欢编程,但从未做过大项目”的“新人”,在此也真心请教sp1234,类似于上述项目,应该采用什么样的设计?
      

  6.   

    我是从新贴传送过来的。……
    ttiimm11啊,lz没说那个门的状态模块是主动式或者被动式的吧。主动式的状态模块真心的不需要多线程。
    被动式的状态模块多不多线程那就看硬件处理模块是不是同步信号了。一个根据现有的硬件确定软件架构的事儿有这么复杂么?还需要新开个贴去质问……