在计时器中使用Console.WriteLine会显示退出的原因

本文关键字:退出 显示 WriteLine 计时器 Console | 更新日期: 2023-09-27 18:28:39

我有一个控制台应用程序,当我使用Console.ReadLine()时,应用程序会显示"Hello World"。为什么Console.ReadKey()不能?`

static void Main(string[] args)
{
     System.Timers.Timer timer = new System.Timers.Timer(1000);
     timer.Elapsed += timer_Elapsed;
     timer.Enabled = true;
     Console.ReadKey();// When use ReadLine() work fine;
}
static void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
     Console.WriteLine("Hello World");
}

固定:http://support.microsoft.com/kb/2805221

在计时器中使用Console.WriteLine会显示退出的原因

Console.ReadKey.NET 4.5的更改可能会使系统死锁

Console.ReadKey现在锁定一个同步对象,当您第一次尝试访问stderr时,该对象就会被锁定。因此,解决方案很简单,我们需要在调用Console.ReadKey.之前初始化Console.Error

更新:Windows 7 SP1、Windows Server 2008 R2 SP1、Windows服务器2008 SP2和Windows Vista SP2中的.NET Framework 4.5有更新:2013年5月

我运行了您的代码,它适用于Console.ReadKey()和Console.ReadLine()

在这个应用程序中,Timer在另一个线程上运行。另一方面,并行地,主线程执行Console.ReadKey()或Console.ReadLine(),Timer的线程继续并行运行,并定期写入"Hello World",直到主线程退出

如果您放置Console.ReadKey(),则主线程将在键盘上按键后退出
如果您放置Console.ReadLine(),则在键盘上按Enter键后,主线程将退出

有关计时器类型的详细信息:http://msdn.microsoft.com/en-us/magazine/cc164015.aspx