puede usar la memoria compartida para los 2 procesos para comunicarse, consulte MemoryMappedFile
principalmente creará un archivo mapeado de memoria mmfen el proceso principal utilizando la instrucción "using", luego creará el segundo proceso hasta que finalice y le permita escribir el resultado en el mmfuso BinaryWriter, luego lea el resultado del mmfproceso principal, también puede pase el mmfnombre usando argumentos de línea de comando o codifíquelo.
cuando utilice el archivo asignado en el proceso principal, asegúrese de que el proceso secundario escriba el resultado en el archivo asignado antes de que el archivo asignado se libere en el proceso principal
Ejemplo: proceso padre
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();
}
Proceso hijo
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 este ejemplo, deberá crear una solución con 2 proyectos en su interior, luego tomar el resultado de compilación del proceso secundario de% childDir% / bin / debug y copiarlo en% parentDirectory% / bin / debug y luego ejecutar el proyecto principal
childDiry parentDirectoryson los nombres de carpeta de sus proyectos en la PC buena suerte :)