2015-02-26 4 views
0

Я запускаю процесс асинхронно с помощью Process.Start(). Затем я жду, чтобы он завершил использование Process.WaitForExit(). Там все хорошо. Но я хочу, чтобы завершенный процесс отправил обратно пользовательский объект для завершения вызова. Есть ли способ сделать это?Сбор результатов асинхронно инициированного процесса

ответ

1

№ Нет «объект» может принадлежать процессу зомби.

Если вы хотите IPC (Inter Process Communication), вы должны сделать это, пока процесс жив. У вас есть много вариантов для технологии (общая память, именованные каналы, COM, RPC, LRPC, HTTP, WCF и т. Д. И т. Д. И т. Д.), Но (почти) все требуют, чтобы процесс был живым.

Возможно, вы захотите рассмотреть файл . Затем дочерний процесс записывает в файл, а затем завершает работу родительский процесс. Это довольно стандартно.

Единственное исключение IPC - это сообщение в очереди. Для этого вам необходимо использовать некоторую технологию очередей. Читайте о Message Queuing (MSMQ).

+0

Thanks Remus. То, что вы говорите, имеет смысл. В таком случае, может ли он работать таким образом? Новый процесс отправляет объект обратно вызывающему, а затем завершается. Но вызывающему нужно ДОЛЖНО БЫТЬ, ЧТО ЭТО ПОЛУЧАЕТ ВЫХОД. Я прошел через Process.OutputDataReceived Event. Будет ли вызывающий абонент ждать, будет ли этот обработчик использоваться? Или есть другой способ? – Ganesh

+0

Это зависит от того, что вы подразумеваете под «процессом отправляет объект» –

+0

Объект будет содержать некоторый статус и информацию об обработке. Количество обработанных строк, время окончания и т. Д. Вызывающий должен знать эту информацию. – Ganesh

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(); 
    } 
} 
Смежные вопросы