【问题标题】:How to use C# console for input and logging at the same time如何同时使用 C# 控制台进行输入和记录
【发布时间】:2015-10-22 12:08:23
【问题描述】:

我有一个 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);
        }
    }
}

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

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

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

等等..

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

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

【问题讨论】:

    标签: javascript c# node.js console


    【解决方案1】:

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

    首先在您的输出中添加一个事件处理程序:

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

    然后在_nodeProcess.Start();之后添加_nodeProcess.BeginOutputReadLine();这一行

    类似:

     _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();
    

    【讨论】:

    • 它确实输出并保持输入,但后来我得到类似:input string node log 1 甚至input strnode log 1 和下一行ing ...我也希望输入打开我的主控制台..不在我的节点进程上.. :( 否则我将一直嵌套系统..
    • 我已经忽略了你的 while 循环,它现在一直在输出,我在主控制台中输入了我想要的 Console.ReadLine();。这样我就可以在主控制台上输入我的命令。我是从控制台控制这个节点进程,而不是从这个进程本身。
    • 好的,很高兴它可以工作。我想我想说的是你需要使用异步输出来启用'Console.ReadLine();'
    • 我已经遇到过异步函数,但是有点忘记了(愚蠢的我)。感谢您为我指明正确的方向。我现在遇到的问题是,当我退出并使控制台保持打开状态时,我的 Node 服务并没有真正停止,并且任何输入都可能与同一行的输出中断.. 有什么想法吗?
    猜你喜欢
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    • 2019-05-01
    • 2019-01-15
    • 2019-08-20
    • 2020-04-10
    相关资源
    最近更新 更多