从异步触发的进程中收集结果

时间:2015-02-26 08:11:05

标签: c# multithreading

我正在使用Process.Start()异步触发进程。然后我等待它使用Process.WaitForExit()完成。在这之前情况很好。但我希望完成的进程在完成时将自定义对象发送回调用方。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

没有。没有'对象'可以属于僵尸进程。

如果您需要IPC(进程间通信),则必须在进程处于活动状态时执行此操作。您有很多选择技术(共享内存,命名管道,COM,RPC,LRPC,HTTP,WCF等等),但(几乎)所有要求进程处于活动状态。< / p>

您可能需要考虑使用文件。子进程写入文件然后终止,然后父进程读取该文件。这是相当标准的。

一个IPC异常是排队通信。这需要您使用一些排队技术。阅读Message Queuing (MSMQ)

答案 1 :(得分:0)

我能够使用以下代码完成它。 newProcess终止后,将在调用者中捕获newProcess的标准输出。

newProcess.StartInfo.FileName = "Auto_Process2.exe";
newProcess.StartInfo.RedirectStandardOutput = true;
newProcess.StartInfo.UseShellExecute = false;

if (newProcess.Start())
{
  while (!newProcess.StandardOutput.EndOfStream)
  {
     newProcessOutput = newProcess.StandardOutput.ReadLine();
  }
}