我有一个C#应用程序,它创建一个通过标准输入与Node.js(node.exe)通信的线程。
创建它的代码非常标准:
ProcessStartInfo NodeStart = new ProcessStartInfo();
NodeStart.FileName = FileName; // node.exe
NodeStart.Arguments = Arguments;
NodeStart.CreateNoWindow = true;
NodeStart.RedirectStandardError = true;
NodeStart.RedirectStandardInput = true;
NodeStart.RedirectStandardOutput = true;
NodeStart.UseShellExecute = false;
process = new Process();
process.OutputDataReceived += ReceivedOutput;
process.StartInfo = NodeStart;
process.Start();
process.BeginOutputReadLine();
只要我不使用Thread.WaitOne()阻止运行它的线程,代码就可以正常工作。一旦我调用Thread.WaitOne(),进程的输入/输出就会出错。下次我取消阻塞线程并写入标准输入时,我什么也得不回来。我在编写标准输入之前检查了调试器中的进程对象,似乎没有任何错误(node.exe正在运行并接受标准输入)。
可能只是标准输入/输出在线程阻塞时中断,但这是真的吗?我无法在任何地方找到答案。