在计时器中使用Console.WriteLine为什么会出现退出的情况?

3

我有一个控制台应用程序,当我使用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");
}

Fixed:http://support.microsoft.com/kb/2805221


我不确定你在问什么。这将每秒显示“Hello World”,直到你按下一个键。你想要什么? - Jonesopolis
5
如果您的计算机上安装了.NET 4.5,则请确保启用了Windows更新。您将获得一个更新,修复了ReadKey()获取锁定以防止WriteLine()向控制台写入文本的问题。 - Hans Passant
@HansPassant,您能将其发布为答案吗? - Servy
WU在Win 8.1上找不到此更新。 - Jure Špik
3个回答

2

0

我运行了你的代码,它可以同时适用于Console.ReadKey()和Console.ReadLine()。


0
在这个应用程序中,计时器在另一个线程上运行。另一方面,在并行执行 Console.ReadKey() 或 Console.ReadLine() 的同时,计时器的线程继续运行,并定期写入“Hello World”,直到主线程退出。
如果您放置 Console.ReadKey(),则主线程将在从键盘按下任意键后退出。
如果您放置 Console.ReadLine(),则主线程将在从键盘按下 Enter 键后退出。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接