使用 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
以及 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);
这里我有一个闹钟的代码:
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
以及 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);