使用 Thread.Sleep 的闹钟

Alarm clock using Thread.Sleep

这里我有一个闹钟的代码:

 public static void Main(string[] args)
    {
        Console.Write("Seconds: ");
        int seconds = int.Parse(Console.ReadLine());

        System.Threading.Thread.Sleep(seconds * 1000);

        Timer timer = new Timer(100);

        timer.Elapsed += MakeSound;

        timer.Enabled = true;

        GC.KeepAlive(timer);

        Console.ReadLine();
    }

    private static void MakeSound(object sender, ElapsedEventArgs e)
    {
        Console.Beep();
    }

如您所见,它看起来不太乐观,因为我正在使用 Thread.Sleep。

如果我使用它仍然有效

Timer timer = new Timer(seconds * 1000); 而不是 System.Threading.Thread.Sleep(seconds * 1000);

但它不会持续发出哔哔声,只是在 seconds * 1000 秒的间隔之间,直到用户按下 Enter。我可以做得更好吗?

如果您查看 System.Threading.Timer 的构造函数重载,您会发现可以指定 dueTime 以及 periodhttps://msdn.microsoft.com/en-us/library/2x96zfy7(v=vs.110).aspx

所以,不要使用 System.Threading.Thread.Sleep(1000 * seconds),而是使用

Timer timer = new Timer(new TimerCallback(MakeSound), null, 1000 * seconds, 100);