阻塞线程时奇怪的标准输出行为

时间:2016-03-28 19:13:59

标签: c# multithreading

我有一个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正在运行并接受标准输入)。

可能只是标准输入/输出在线程阻塞时中断,但这是真的吗?我无法在任何地方找到答案。

0 个答案:

没有答案