C# - Console.In.ReadToEnd()挂起用户输入,如果没有数据通过管道进程编程

Mat*_*att 5 c# console command-line pipe

我正在编写一个带有2个参数的C#控制台应用程序: myprogram.exe param1 param2

param2 是可选的,想法是如果它不存在,获取管道数据:

echo "hithere" | myprogram.exe param1
Run Code Online (Sandbox Code Playgroud)

我通过捕获Console.In.ReadToEnd()仅传递1个参数时使这部分工作.

我面临的问题是,当只传递1个参数并且没有数据被管道传输时,它只是在那里听取用户输入,并且关闭的唯一方法是Ctrl+C结束程序.

相反,有没有办法返回错误并退出程序,如果只提供了1个参数,没有数据被管道?


为了测试是否有任何等待,我尝试使用:

  • Console.OpenStandardInput().CanRead
  • Console.OpenStandardInput().Length
  • Console.In.Peek()

那没用.

我也试过了这个stackoverflow问题底部提到的'hack':C#Console接收带管道的输入.

有任何想法吗?

OJ.*_*OJ. 5

检查命令行,而不是检查控制台。如果他们传递了足够的参数,则假设没有从控制台获取任何内容。如果他们没有指定足够的参数,则假设 URL 将来自控制台。您不需要使用ReadToEnd(),只需使用 ,ReadLine()这样您就可以逐行进行操作。如果使用,ReadToEnd()则必须按 CTRL+Z(或 Linux 中的 CTRL+D)来指示输入流的结束。