1

这是一本 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 被按下时循环没有结束。

我在这里缺少什么?

4

2 回答 2

4

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

从文档中:

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

于 2013-04-24T16:56:03.533 回答
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'

于 2013-04-24T16:55:33.133 回答