如何使用C#控制台同时进行输入和记录

时间:2015-10-22 12:08:24

标签: javascript c# node.js console

我有一个C#控制台应用程序。我正在启动另一个cmd进程来使用我的NodeJS应用程序(可能有任何关于如何执行此操作的建议吗?我必须同时运行它们,它们可以工作)。

现在NodeJS处理它的输出被流式传输到我的C#控制台。

private readonly Process _nodeProcess = new Process
{
    StartInfo =
    {
        FileName = "cmd",
        Arguments = @"/K Node server.js",
        UseShellExecute = false,
        RedirectStandardOutput = true
    }
};

internal void Start()
{
    _nodeProcess.Start();
    using (StreamReader reader = _nodeProcess.StandardOutput)
    {
        while (true)
        {
            string result = reader.ReadLine();
            Console.WriteLine(result);
        }
    }
}

这很好用。 现在的问题是,我的Node记录了一些东西,但同时我希望能够在我的控制台上发出命令(输入)。

我的控制台输出示例:(当然它使用整个系统,输出真实的东西..)

NodeJS process started
node log 1
node log 2
node log ...

依旧......

但是当它不断输出我的日志行时,我希望能够使用Console.ReadLine();输入(用于命令输入)。这没有在输出行的同一行内键入的风险。

我将不胜感激任何帮助。欢迎任何有关改进我的代码的建议。

1 个答案:

答案 0 :(得分:2)

在您的情况下,最好处理输出异步

首先在输出中添加一个Eventhandler:

_nodeProcess.OutputDataReceived += (s, e) => Console.WriteLine(e.Data);

然后在_nodeProcess.BeginOutputReadLine();

之后添加行_nodeProcess.Start();

类似的东西:

 _nodeProcess.OutputDataReceived += (s, e) => Console.WriteLine(e.Data);
 _nodeProcess.Start();
 _nodeProcess.BeginOutputReadLine();

 var line = Console.ReadLine();
 while (line != null && line.ToLower() != "exit")
 {
      line = Console.ReadLine();
 }
 _nodeProcess.Close();