Process的StreamWriter挂起WriteLine();

时间:2014-07-30 12:51:51

标签: c# process streamwriter flush

我制作了一个需要在3个进程之间进行大量通信的软件。但是,在某些时候,Process.StandardInput中的WriteLine(string)方法只会挂起程序。

这是codesnippet,它被称为多次

public void Talk(string message)
{
    if (!started)
        Start();
    LogConsole.Log("-> " + this.Name + ": " + message, LogMode.GameLog);

    this.process.StandardInput.WriteLine(message.ToCharArray(), 0, message.Length);
}

1 个答案:

答案 0 :(得分:2)

当您重定向流程的标准I / O时,您必须确保实际上始终正在读取输入。播放中的缓冲区有限,因此如果其中一个进程停止读取其输入,则从另一个进程写入将阻塞,直到缓冲区被清空/读取为止。

正确处理此问题的最简单方法是始终使用异步I / O来处理读写标准输入/输出/错误。除非这种情况发生异步,否则很容易导致两个进程之间出现死锁(例如,一个进程尝试写入而另一个进程也尝试写入,并且它们没有达到实际的程度读取数据,这样它们在写入时都会卡住,因为缓冲区已满。

另外,不要Flush。这不是一个好主意。