我有一个非常简单的C#控制台应用程序,它显示一些文本并循环等待输入,直到按下Escape键或超时期满。
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
namespace SampleApp
{
public static class Program
{
public static void Main (string [] args)
{
var key = new ConsoleKeyInfo();
var watch = Stopwatch.StartNew();
var timeout = TimeSpan.FromSeconds(5);
Console.WriteLine("Press escape to return to the previous screen...");
Console.WriteLine();
do
{
Console.WriteLine("This screen will automatically close in " + ((timeout + TimeSpan.FromSeconds(1)) - watch.Elapsed).ToString(@"hh\:mm\:ss") + ".");
if (Console.KeyAvailable) { key = Console.ReadKey(true); }
else { Thread.Sleep(TimeSpan.FromSeconds(0.10D)); }
}
while ((key.Key != ConsoleKey.Escape) && (timeout > (watch.Elapsed - TimeSpan.FromSeconds(0.5D))));
watch.Stop();
}
}
}
这个程序正常工作,但是如果我用鼠标点击控制台应用程序(例如为了获取焦点),屏幕上的所有活动都会冻结,直到我右键单击或按下Esc键。在此期间,控制台的标题也会更改为
"选择AppName"
,假设"AppName"
是之前的标题。如果我先在控制台上右键单击,
do {...} while ();
循环似乎变得疯狂并打印出许多额外的行。由于我不知道控制台的这种行为,不确定该问什么。这种情况是否可以预料?如果可以,我能否更改此行为?如果不能,希望能提供解决方法的建议。