我做的监控程序作用是可以设置每天程序重启或停止的时间。用一个Timer24小时扫描,到点就做相应的功能。
界面用的是DataGridView,每一行都是一个程序,每个程序都有一个Manager管理Timer。
我是在新加一个Row时,New一个Manager,然后在Manager的构造函数里启动一个全程Timer,用来检查到没到启动时间或者停止时间。
出现的问题是:运行的时间长了,偶尔会发生功能失效的情况,就是没有重启或停止。
想问问大家,有没有这样的类似的经验,教教我。谢谢大家。

解决方案 »

  1.   

    估计是你的时间的扫描有问题,也就是说你的Timer可能和你的时间存在差异,在那个时刻没有比对上你想要开启或者停止的时间,所以失效
      

  2.   

    回LS,以前确实是Timer间隔是1秒, 而时间比对是精确于秒级,也就是:DateTime.Now.ToString("HH:mm:ss")=="12:57:20" 这样判断。而之后我改成了,Timer间隔为0.5秒。DateTime.Now.ToString("HH:mm:ss")=="12:57:20"||DateTime.Now.ToString("HH:mm:ss")=="12:57:21" 相当于有4次触发的机会,但是仍然有问题,这就是我不明白的地方。
      

  3.   

    这样,
    if(!m_bIsStart && DateTime.Now.ToString("HH:mm:ss")>="12:57:20")
    { …… }
    m_bIsStart表示进程是否已启动,每个被监控的进程对应一个m_bIsStart。
      

  4.   

    不太清楚LZ的控制逻辑。我好奇做完以后 m_bIsStart 会不会被归位false呢?如果会,(!m_bIsStart && DateTime.Now.ToString("HH:mm:ss")>="12:57:20")
    12:57:20到第二天零点一直会做,这肯定不是你想要的吧。如果不会,做完一次后 !m_bIsStart = false,那当然就不会再做了。
      

  5.   

    感谢大家的关注。
    LS的建议不错,我会去试一下,时间是自己输入的,在cell里面,可以取到。
    我原本以为启动一个程序对电脑来说不费什么时间,现在看看根据你的建议用异步试试。