none
Timer计时器 RRS feed

  • 问题

  • 我发现DispatcherTimer好像只对用户界面线程上有效,在Console中使用,Tick将一直不发生。现在想实现这种功能:是A在3-5分钟逐渐增加4-6次,再3-5分钟减少5-15次。然后立即使A=0。请高手指点,怎么设计?
    勿以恶小而为之,勿以善小而不为
    2010年6月27日 7:31

答案

  • 恩。经过试验,只有System.Timers.Timer或者System.Threading.Timer这两个计时器可以。我最终用的后者。代码如下:

        public static int count = 0;
        public static int total=0;  
        public static Timer timer1;
        public static Timer timer2;
        public static Random ranobj;
        public static int timevalue;
        public static int a;
        public static int A = 0;
        public static void Main()
        {       
            ranobj = new Random();

            a = ranobj.Next(3, 5);
            total = ranobj.Next(4, 6);       
            timevalue = (a * 60) / total;
            timer1 = new Timer(new TimerCallback(CheckStatus), null, 0, timevalue * 1000);      

            Console.ReadLine();     
        }

       
        static void CheckStatus(Object state)
        {

            if (count < total)
            {           
                count++;
                A++;

            }
            else
            {
                count = 0;           
                timer1.Dispose();
                total = ranobj.Next(5, 15);
                timevalue = (a * 60) / total;           
                timer2 = new Timer(new TimerCallback(CheckStatus2), null, 0, timevalue * 1000);
            }      

        }

        static void CheckStatus2(Object state)
        {

            if (count < total)
            {           
                count++;
                A--;

            }
            else
            {
                count = 0;           
                timer2.Dispose();           
            }

        }

    如果谁有更好的方法,请分享。


    勿以恶小而为之,勿以善小而不为
    • 已标记为答案 dut60 2010年6月28日 13:58
    2010年6月28日 13:58

全部回复

  • 你可以说使用Timer控件

    System.Windows.Forms.Timer timer1;


    努力+方法=成功
    2010年6月27日 9:39
  • System.Windows.Forms.Timer此计时器最宜用于 Windows 窗体应用程序中,并且必须在窗口中使用(MSDN)。

    System.Threading.Timer可以。现在如果用两个计时器达到上述效果的话,两个计时器是并行交叉执行的,而不是在3-5分钟逐渐增加4-6次之后,再 3-5分钟减少5-15次的效果。哪位高手能把代码贴出来,感激不尽。

    勿以恶小而为之,勿以善小而不为
    2010年6月28日 0:52
  • 你好!

         可以使用System.Timers.Timer这个计时器!


    周雪峰
    2010年6月28日 5:04
    版主
  • 恩。经过试验,只有System.Timers.Timer或者System.Threading.Timer这两个计时器可以。我最终用的后者。代码如下:

        public static int count = 0;
        public static int total=0;  
        public static Timer timer1;
        public static Timer timer2;
        public static Random ranobj;
        public static int timevalue;
        public static int a;
        public static int A = 0;
        public static void Main()
        {       
            ranobj = new Random();

            a = ranobj.Next(3, 5);
            total = ranobj.Next(4, 6);       
            timevalue = (a * 60) / total;
            timer1 = new Timer(new TimerCallback(CheckStatus), null, 0, timevalue * 1000);      

            Console.ReadLine();     
        }

       
        static void CheckStatus(Object state)
        {

            if (count < total)
            {           
                count++;
                A++;

            }
            else
            {
                count = 0;           
                timer1.Dispose();
                total = ranobj.Next(5, 15);
                timevalue = (a * 60) / total;           
                timer2 = new Timer(new TimerCallback(CheckStatus2), null, 0, timevalue * 1000);
            }      

        }

        static void CheckStatus2(Object state)
        {

            if (count < total)
            {           
                count++;
                A--;

            }
            else
            {
                count = 0;           
                timer2.Dispose();           
            }

        }

    如果谁有更好的方法,请分享。


    勿以恶小而为之,勿以善小而不为
    • 已标记为答案 dut60 2010年6月28日 13:58
    2010年6月28日 13:58