você pode usar memória compartilhada para os 2 processos para se comunicar, confira MemoryMappedFile
você criará principalmente um arquivo mapeado de memória mmf
no processo pai usando a instrução "using" e depois criará o segundo processo até que termine e deixe gravar o resultado no mmf
uso BinaryWriter
, depois ler o resultado mmf
no processo pai usando, você também pode passe o mmf
nome usando argumentos de linha de comando ou codifique-o.
ao usar o arquivo mapeado no processo pai, certifique-se de que o processo filho grave o resultado no arquivo mapeado antes que o arquivo mapeado seja liberado no processo pai
Exemplo: processo pai
private static void Main(string[] args)
{
using (MemoryMappedFile mmf = MemoryMappedFile.CreateNew("memfile", 128))
{
using (MemoryMappedViewStream stream = mmf.CreateViewStream())
{
BinaryWriter writer = new BinaryWriter(stream);
writer.Write(512);
}
Console.WriteLine("Starting the child process");
// Command line args are separated by a space
Process p = Process.Start("ChildProcess.exe", "memfile");
Console.WriteLine("Waiting child to die");
p.WaitForExit();
Console.WriteLine("Child died");
using (MemoryMappedViewStream stream = mmf.CreateViewStream())
{
BinaryReader reader = new BinaryReader(stream);
Console.WriteLine("Result:" + reader.ReadInt32());
}
}
Console.WriteLine("Press any key to continue...");
Console.ReadKey();
}
Processo filho
private static void Main(string[] args)
{
Console.WriteLine("Child process started");
string mmfName = args[0];
using (MemoryMappedFile mmf = MemoryMappedFile.OpenExisting(mmfName))
{
int readValue;
using (MemoryMappedViewStream stream = mmf.CreateViewStream())
{
BinaryReader reader = new BinaryReader(stream);
Console.WriteLine("child reading: " + (readValue = reader.ReadInt32()));
}
using (MemoryMappedViewStream input = mmf.CreateViewStream())
{
BinaryWriter writer = new BinaryWriter(input);
writer.Write(readValue * 2);
}
}
Console.WriteLine("Press any key to continue...");
Console.ReadKey();
}
Para usar esse exemplo, você precisará criar uma solução com 2 projetos internos, pegar o resultado da construção do processo filho de% childDir% / bin / debug e copiá-lo para% parentDirectory% / bin / debug e executar o projeto pai
childDir
e parentDirectory
são os nomes das pastas dos seus projetos no pc boa sorte :)