检查IO流是否在C#中被阻止



C#中,可以使用其stdinstdout

交互式程序有时会阻止等待输入。该流未关闭,在调用ReadLine方法时,该方法会块,直到更多数据可用为止。

是否有一种方法可以验证当前在stdin上是否仍有数据,而无需阻止(如果没有更多数据,则该程序必须馈送该过程的stdin)...

代码示例:

this.process = new Process ();
this.process.StartInfo.FileName = "foo";
this.process.StartInfo.Arguments = "--nowarnings -i";
this.process.StartInfo.UseShellExecute = false;
this.process.StartInfo.RedirectStandardInput = true;
this.process.StartInfo.RedirectStandardOutput = true;
this.process.StartInfo.RedirectStandardError = true;
this.process.StartInfo.CreateNoWindow = true;
this.process.Start ();
this.stdin = this.process.StandardInput;
this.stdout = this.process.StandardOutput;
this.stdin.WriteLine ("command1");
while (!stdout.EndOfStream) {
    Console.WriteLine (stdout.ReadLine ());
}
this.stdin.WriteLine ("command2");

您可以使用Console.KeyAvailable属性检查输入流中是否有可用的符号。但是,您应该将Console.ReadKey方法与KeyAvailable结合使用,因为ReadLine将阻塞直到stdin接收newline序列或文件结束。

相关内容

  • 没有找到相关文章

最新更新