循环时永远不会结束

时间:2013-04-24 16:52:57

标签: c# timer while-loop

以下是一本C#书的例子:

//  Timer02.cs - Displaying Date and Time
//      Using the Timer class. 
//      Press Ctrl+C or 'q' folllwed by Enter to end program. 
//------------------------------------------------------------
using System;
using System.Timers;

class myApp
{
    public static void Main()
    {
        Timer myTimer = new Timer();
        myTimer.Elapsed += new ElapsedEventHandler(DisplayTimeEvent);
        myTimer.Interval = 1000;
        myTimer.Start();


        while (Console.Read() != 'q')
        {
            ;    // do nothing...
        }
    }

    public static void DisplayTimeEvent(object source, ElapsedEventArgs e)
    {
        Console.Write("\r{0}", DateTime.Now);
    }
}

我猜这是循环运行直到q被按下,但是当按下q时循环没有结束。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:4)

我怀疑你在q之后没有按回车。 Console.Read方法阻塞,直到整行读取,即使它实际上只读取该行的单个字符。

来自文档:

  

当您键入输入字符时,Read方法会阻止其返回;按Enter键时它会终止。

答案 1 :(得分:1)

编辑:我发布的方法从未打印过消息,直到按下其他键为止。

然而,这将有效....

public static void Main()
    {
        Timer myTimer = new Timer();
        myTimer.Elapsed += new ElapsedEventHandler(DisplayTimeEvent);
        myTimer.Interval = 1000;
        myTimer.Start();

        while (true)
        {
            if (Console.KeyAvailable)
            {
                while (Console.ReadKey().KeyChar != 'q')
                {
                    // do nothing
                }
                break;
            }
        }
    }

这里的关键是使用:Console.ReadKey()。KeyChar!='q'