![]() |
1
9
你不能在这里可靠地使用endofstream。如果streamreader.endofstream属性没有缓冲任何字符,它将调用standardoutput.read()。如果进程没有向其输出管道发送任何内容并且没有关闭它,那么read()调用将阻塞。因为它将等待输入,所以几乎可以保证会发生这种情况。EndofStream将不会返回true,除非进程关闭了其输出管道的末端,并且StreamReader已消耗了其所有缓冲字符。在程序终止时。 使用beginOutputReadline()可能是检测“marker”行的更好方法。注意回调发生在另一个线程上。还要注意,不需要等待进程发送标记,您所写的任何内容都将被缓冲,直到进程准备好读取标记为止。注意,缓冲区很小,可能出现死锁。 |
![]() |
2
1
在与流程类交互时,有许多路径可以为其创建死锁。微软在 MSDN site here . 这就是我的说法。请注意,对接收到的ErrorDataReceived和OutputDataReceived的处理,以及对BeginErrorReadline和BeginOutputReadline的调用。这通过让父进程异步读取流来消除死锁场景。注意:runprocessResponse是我自己的小包装器数据传输对象。
|
![]() |
3
0
在从标准输出读取之前,是否等待过程完成:
|
![]() |
4
0
如果您知道在您的之后没有更多的标准输入:
循环,您可以使用以下命令关闭标准输入:
表示不再有输入。只要标准输入是开放的,就有可能产生更多的输入,从而产生更多的输出;因此,标准输出永远不会到达流内。 |
![]() |
A B · C#Excel自动调整列避免长文本时出错 4 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 4 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 4 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 5 月前 |