这里有一个闹钟代码:
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键。我可以做得更好吗?
答案 0 :(得分:1)
如果查看System.Threading.Timer
的构造函数重载,您会看到可以指定dueTime
以及period
:https://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);