[英]C# Timer - Termination
以下計時器將運行多長時間?我以為它將一直運行到我關閉程序為止。但是經過10輪滴答之后,計時器關閉了。
static void Main()
{
Console.WriteLine("Started at {0:HH:mm:ss:fff}", DateTime.Now);
using (System.Threading.Timer timer =
new System.Threading.Timer(new TimerCallback(Tick), null, 3000, 1000))
{
// Wait for 10 seconds
Thread.Sleep(10000);
// Then go slow for another 10 seconds
timer.Change(0, 2000);
Thread.Sleep(10000);
}
Console.ReadKey(true);
}
static void Tick(object state)
{
Console.WriteLine("Ticked at {0:HH:mm:ss.fff}", DateTime.Now);
}
問題是計時器在程序退出使用塊時就被破壞了。 將Console.ReadKey(True)
向上推到Using-Statement中,它將起作用。
static void Main()
{
Console.WriteLine("Started at {0:HH:mm:ss:fff}", DateTime.Now);
using (System.Threading.Timer timer =
new System.Threading.Timer(new TimerCallback(Tick), null, 3000, 1000))
{
// Wait for 10 seconds
Thread.Sleep(10000);
// Then go slow for another 10 seconds
timer.Change(0, 2000);
// unnecessary: Thread.Sleep(10000);
Console.ReadKey(true);
}
}
static void Tick(object state)
{
Console.WriteLine("Ticked at {0:HH:mm:ss.fff}", DateTime.Now);
}
另外,Threading.Sleep()並不是處理此類情況的最佳方法 ,因為它阻塞了程序的主線程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.