Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么Process.StandardOutput.ReadToEnd与常规StreamReader.ReadToEnd具有不同的行为?_C#_Process_Stream - Fatal编程技术网

C# 为什么Process.StandardOutput.ReadToEnd与常规StreamReader.ReadToEnd具有不同的行为?

C# 为什么Process.StandardOutput.ReadToEnd与常规StreamReader.ReadToEnd具有不同的行为?,c#,process,stream,C#,Process,Stream,现在是凌晨2点,我不明白为什么Process.StandardOutput.ReadToEnd()会这样做。不知何故,它只能在流程完成后读取流程的所有输出,而不是仅读取标准输出的一部分(这是预期的,因为流程是异步运行的) ReadToEnd与Process.WaitForExit()结合使用;它不是单独使用的ReadToEnd的工作原理与文档中的完全相同,但是当我尝试使用MemoryStream、StreamReader和异步StreamWriter进行模拟时,StreamReadToEnd()

现在是凌晨2点,我不明白为什么
Process.StandardOutput.ReadToEnd()
会这样做。不知何故,它只能在流程完成后读取流程的所有输出,而不是仅读取标准输出的一部分(这是预期的,因为流程是异步运行的)

ReadToEnd
Process.WaitForExit()结合使用
;它不是单独使用的
ReadToEnd
的工作原理与文档中的完全相同,但是当我尝试使用
MemoryStream
StreamReader
和异步
StreamWriter
进行模拟时,
StreamReadToEnd()
立即返回,没有与
StreamWriter
编写的相同的输出。这并不是说
过程。ReadToEnd
不起作用;我只是不明白为什么会这样

以下是已执行文件的代码:

publicstaticvoidmain(字符串[]args){

对于(int i=0;ii如果您选中,则类型为
StreamReader
,因此您的问题看起来是由您自己的测试引起的。可能是因为有两个流和一些竞争条件。当您打开并读取文件时,Windows将在您到达文件末尾时关闭流。c#实际上是调用Windows方法来进行读取。W对于标准输入/输出,应用程序必须关闭通常在应用程序结束时出现的流。因此,标准输入流仍然是打开的。@bradbury9我知道
进程。标准输出
是一个
流阅读器
。我只是好奇
进程。标准输出
是如何编写的,以便它能在是的,因为从
StreamReader
的工作方式来看,它似乎不直观。@jdweng我不相信这能回答任何问题,除非我误解了你的意思。你的问题是“ReadToEnd有效”。它在读取文件时工作,因为windows关闭了流/文件,因此有一个文件结尾。当应用程序使用标准输出运行时,流仍然打开,因此没有流结尾。应用程序仍然可以向流结尾添加更多数据。windows流只有一个指针,可以创建问题。Linux是much更好,有两个流指针。一个指示输入位置,on指示输出位置。Linux在输出仍在读取时,可以将输入位置设置为null。Windows无法这样做。