假如要对两台服务器进行同时实时监控,一个timer1负责监控硬盘信息,timer2负责监控网络信息,而两台服务器是否要监测硬盘、网络信息是可以任意配置的,如果一个服务器配置监控了硬盘信息和网络信息,另一台服务器只监控网络信息不监控硬盘信息,这时timer要同时实时的做两件事启动Timer1的Tick事件监控服务器1,而同时又要服务器2又要求Tick事件不能启动,怎么做到???

解决方案 »

  1.   

    用System.Threading.Timer类,创建两个线程来运行各自的timer,分别给两个timer传递一个参数来控制它是否检控网络信息和硬盘信息,
      

  2.   

    如果用 System.Timers.Timer 的话,这个 timer 类本身算不算已经是开了另一个线程来实现监控了,因此不需要再创建一个类来启动这个 timer?另外那么多线程都需要反馈信息的话,不 Control.CheckForIllegalCrossThreadCalls = false; 的话要保证不冲突还挺麻烦吧?
      

  3.   

    不要随便设置Control.CheckForIllegalCrossThreadCalls = false这个
      

  4.   


    那么在线程很多的情况下该如何防止冲突呢?有时候虽然编译通过了但运行的时候就会出错冲突
    Cross-thread operation not valid: Control 't1' accessed from a thread other than the thread it was created on.比如我现在在用多个 System.Timers.Timer 触发不同的定时器对UI线程下的一些变量进行修改,变量的修改是个很快速的过程,没有太多等待,按说应该不会冲突,可是还是报错
      

  5.   

    为什么要2个Timer,自己给自己上难度啊