首页 > 解决方案 > 在标准输入上写入子进程,然后在子进程仍在运行时退出父进程

问题描述

我正在编写一个 C# 控制台应用程序,其中我有一个进程生成一个子进程并使用Process.StandardInput.WriteLine(mes). 我遇到的问题是Process.StandardInput.WriteLine(mes)父进程似乎直到子进程终止才返回,此时父进程继续并完成。

我需要一种方法以标准输入将消息发送到子进程,然后终止父进程并让子进程继续运行。

我认为该程序很容易遵循。父进程调用SendOutput()哪个调用Process.StandardInput.Writeline(mes). 之后,我希望它会继续Exit()通话。子进程只是读取字符串 with Console.ReadLine()

父进程代码

static void Main(string[] args)
{
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.UseShellExecute = false;
    startInfo.RedirectStandardInput = true;
    startInfo.FileName = @"C:\Program Files\jobprinty\jobprintyDlite2020.exe";

    Process process = new Process();
    process.StartInfo = startInfo;
    process.Start();

    string message = GetConsoleInput();

    sendOutput(process, message);

    System.Environment.Exit(0);

}

public static void sendOutput(Process p ,string mes)
{
    p.StandardInput.WriteLine(mes);
}

子进程代码

public static String GetConsoleInput()
{
    String line = null;
    String completeline = null;

    //reads from standard input into string, "complete line"
    do
    {
        line = Console.ReadLine();
        if (line != null) Console.WriteLine("--" + line);

        //line = line + Environment.NewLine;
        if (line != null) line = line.Trim();

        completeline = completeline + line + Environment.NewLine;

    } while (line != null);

    //delete extra white space from input, complete line
    completeline = completeline.Trim();
    return completeline;

}
public static void Main(string[] args)
{

    //------recieve args from console
     completeline = GetConsoleInput();

标签: c#asynchronousprocessipc

解决方案


推荐阅读