c# - 在标准输入上写入子进程,然后在子进程仍在运行时退出父进程
问题描述
我正在编写一个 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();
解决方案
推荐阅读
- swift - 带有图像的 swift 4 pickerview
- angular - ngFor while string is "something" 是可能的吗?
- jquery - 如何将数据属性添加到最近的类?
- c++ - 将已解析序列的每个元素传递给返回规则属性类型的函数
- postgresql - 查看日期范围并查找是否可用
- apache-spark - Spark 的 HadoopPartitions 的默认分区是如何计算的?
- javascript - Laravel 和 Vue 设置
- google-pagespeed - Pagespeed 在灯塔中显示不同的分数与 Google chrome 性能审计
- integer - 合适的重量是多少?
- tensorflow - AttributeError:模块'sparkdl'没有属性'graph'