检查C#中是否阻止了IO流

时间:2014-01-19 18:02:04

标签: c# stream interactive

在C#中,可以运行一个进程并使用它的stdin和stdout与它进行交互。

然而,交互式程序有时会阻止等待输入。流未关闭,并且在调用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");

1 个答案:

答案 0 :(得分:2)

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