StandardOutput ReadToEnd默认情况下进程暂停时

时间:2011-09-06 13:13:49

标签: c# process console wrapper

我必须查看数百篇与StandardOutput ReadtoEnd暂停相关的文章,但似乎没有一篇文章回答我的具体问题。

我的场景是我正在为我的ASP.NET MVC应用程序中使用的第三方控制台应用程序创建一个包装器。我启动过程,传递一个输入字符串(这是一个字符串格式的点文件),应用程序返回一个文件(在这种情况下为pdf)。

该文件被放入标准输出(根据文档),但我似乎无法读取数据。

当我手动运行控制台应用程序时,我在输出窗口中以文本形式接收文件,但程序从未真正退出"退出"。我必须按CTRL + C结束这个过程。

我猜这就是为什么我打电话给

process.StandardOutput.ReadToEnd(); 

刚挂?

任何人都可以对我做错的事情有所了解。我希望将方法调用中输出的文件作为byte[]返回。

如果看起来这是重复的话,感谢和批评。

1 个答案:

答案 0 :(得分:2)

有两个问题:

  1. ReadToEnd()返回一个字符串。如果数据是二进制的话,这不是个好主意
  2. ReadToEnd()没有返回,因为程序永远不会退出
  3. 因此,尝试使用更低级别的流方法(如Stream.Read)读取基础流(process.StandardOutput.BaseStream),并在程序完成发送数据时检测自己。