控制台.启动进程时KeyAvailable失败

本文关键字:KeyAvailable 失败 进程 启动 控制台 | 更新日期: 2023-09-27 18:14:01

下面是一段可以正常工作的代码。当我模拟一个长时间运行的进程时,任何击键都会排队。Console.Available返回truefalse,正如文档所指示的那样。这里一切正常:

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

控制台.启动进程时KeyAvailable失败

已启动的进程显示一个成为活动窗口的窗口。当控制台窗口为活动窗口时,控制台应用程序仅接收键盘输入。尝试将ProcessStartInfoCreateNoWindow属性设置为true