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");
}

已修复: http: //support.microsoft.com/kb/2805221

4

3 回答 3

2

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

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

更新:适用于 Windows 7 SP1、Windows Server 2008 R2 SP1、Windows Server 2008 SP2 和 Windows Vista SP2 中的 .NET Framework 4.5 的更新:2013 年 5 月

于 2013-08-21T17:53:06.367 回答
0

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

于 2013-08-21T12:22:57.307 回答
0

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

如果你把 Console.ReadKey() 从键盘按键后主线程将退出。
如果你把 Console.ReadLine() 从键盘按下回车键后主线程将退出。

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

于 2013-08-21T12:36:22.980 回答