这是一段代码,工作得很好。当我模拟一个长时间运行的进程时,任何击键排队。 Console.Available
会返回true
和false
,就像文档中指出的那样。一切都很好:
while (true) {
Console.WriteLine("Starting long task...");
// Simulate some long task by sleeping 3 seconds
System.Threading.Thread.Sleep(3000);
Console.WriteLine("Long task is finished.");
if (Console.KeyAvailable)
Console.WriteLine("A key is available: " + Console.ReadKey(false).Key);
else
Console.WriteLine("*** No Key available ***");
}
问题在于:当我使用代码替换Thread.Sleep()
来创建并运行真实的Process
时,Console.KeyAvailable
将停止工作。 Console.KeyAvailable
行为不正常,通常会返回false
,但如果我输入足够快的密钥,有时会返回true
。
有人对此有解释吗?
while (true) {
LongRunningProcess("someFile.bin");
if (Console.KeyAvailable)
Console.WriteLine("A key is available: " + Console.ReadKey(false).Key);
else
Console.WriteLine("*** No Key available ***");
}
private static bool LongRunningProcess(String filename) {
ProcessStartInfo processStartInfo = new ProcessStartInfo("BlahBlahBlah.exe", filename);
processStartInfo.UseShellExecute = false;
processStartInfo.RedirectStandardError = true;
Process p = new Process();
p.StartInfo = processStartInfo;
p.Start();
StreamReader stdError = p.StandardError;
int readResult = stdError.Read();
p.Close();
if (readResult != -1) // error was written to std error
return false;
return true;
}
答案 0 :(得分:1)
启动的进程显示一个窗口,该窗口成为活动窗口。您的控制台应用程序仅在您的控制台窗口是活动窗口时接收键盘输入。尝试将cout << (y % 8);
的{{1}}属性设置为true。