想实现类似闹钟的功能,设定比如6:00则弹出MessageBox如果放一个Timer控件的话,一直触发一直触发很浪费系统资源有什么好一点的思路?系统到6:00触发一次可能不?

解决方案 »

  1.   

    比如现在我们决定如何为timer的Interval值,我们计算现在时间跟6:00之间的差距的就好了,就可以设置好timer的Interval了!还用什么一直触发?
      

  2.   

    楼上没听明白意思吧。如果他是在18:00设定的,你设置Interval值为多少如果他是在19:00设定的,你设置Interval值为多少如果程序设定完了关闭,那你的Interval值又为多少
      

  3.   

    如果放一个Timer控件,间隔为1秒,不就是一直触发一直触发么每次启动都算一算!?这样科学!?
      

  4.   

    其实根本不对的。那个5颗星的就是个智障如果我在5点启动程序,而闹钟是在6点响,那么Timer的间隔就是1小时但是请问你,到了6点你打算把Timer控件停了还是不停。如果不停那么每隔一个小时响一次如果停到,难道这个闹钟程序今天响,明天就不响了!?
      

  5.   

    可设1分钟触发一次,或更长。private Datetime datetime=Datetime.now;//这句放在
    if(datetime.Hour.ToString()=="6")
    {
        MessageBox.show("6点整");
    }
      

  6.   

    5颗星说得有道理呀。。
    如果在5点启动程序,而闹钟是在6点响,那么Timer的间隔就是1小时
    6点响后你应该再修改Interval的值的
      

  7.   

    如果在程序的运行过程中修改了对于系统时间进行了调整怎么办?5星的方法貌似还是不太方便。看看这样可以不。在每次触发timer事件的时候,计算当前时刻与标准时刻之间的时间差异,随着时间差值的减少对于timer的Interval属性进行动态的修改,乘以一个固定系数,随着差值事件的减少timer事件触发的会越来越频繁,在快到标准时刻时会变成1s进行一次检查。
    不过这个思路也存在缺陷:如果对于系统时间进行调整的话,程序是不会自动识别的。继续跟帖.....
      

  8.   

    不会浪费资源,占有的内存和CPU很少,运行试试就知道了
      

  9.   

    只是多加一个WM_TIMER消息嘛,问题不会太大的,Windows接收的消息还少吗?
      

  10.   

    应该是这样的意思,如果距离6:00很远的话,interval值设置大一点,靠经的话,就1s一次.
      

  11.   


    完全没有必要,计算从现在开始到指定的时间,还需要多少时间,计算出来后,直接休眠到那个时候,
    醒来就提醒。提醒用MessageBox来提醒,这样,线程会中止直到MessageBox被Click可以参考一下,这个C#开发系统服务时用的定时器组件 
      

  12.   

    sp1234的思路是对的,只是Timer的Interval似乎无法设为24小时(System.Timer.Timer),上限是35分钟左右,其他的Timer没细看,印象中其他Timer的计时更不准确。另外Timer的精度也是个问题,计时未必准确,受外界影响比较大。我觉得可以把这个Interval用二分来调整,比如启动时,算好距离6点还有多少秒,>70分钟,就设为35分钟,<70分钟,就设为剩余时间的一半,精确到秒应该就可以了,每次Timer触发时调整自身的Interval
      

  13.   

    不对啊 ,这个态度有点不对啊  闹钟 ,闹啊  ,每天都闹 ,那就写个win计划任务,用vbs 写个执行的脚本,然后系统自己去闹吧,不管你程序启动不启动 
      

  14.   

    把程序放到Windows的任务管理器里
      

  15.   

    很久不搞VB了  好像有一个NEW 是获取当前时间的 
      

  16.   

    不用任务计划的话while就行了 搞这么麻烦
      

  17.   

    不好意思Timer的Interval可以是24小时,希望没有误导大家。
      

  18.   

    引用 18 楼 feixuyue 的回复:
    引用 1 楼 sp1234 的回复:
    比如现在我们决定如何为timer的Interval值,我们计算现在时间跟6:00之间的差距的就好了,就可以设置好timer的Interval了!还用什么一直触发?应该是这样的意思,如果距离6:00很远的话,interval值设置大一点,靠经的话,就1s一次.完全没有必要,计算从现在开始到指定的时间,还需要多少时间,计算出来后,直接休眠到那个时候,
    醒来就提醒。提醒用MessageBox来提醒,这样,线程会中止直到MessageBox被Click可以参考一下,这个C#开发系统服务时用的定时器组件  
     
      

  19.   

    系统会做优化,最后还是硬件时钟,这期间不用考虑CPU的使用。
      

  20.   

    尊重一个SB?那我就掉档次了他不是sp1234,而是sb1234