使用Thread.Sleep的闹钟

时间:2017-11-03 11:10:23

标签: c# alarm

这里有一个闹钟代码:

 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键。我可以做得更好吗?

1 个答案:

答案 0 :(得分:1)

如果查看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);