puede usar la memoria compartida para los 2 procesos para comunicarse, consulte MemoryMappedFile
principalmente creará un archivo mapeado de memoria mmf
en el proceso principal utilizando la instrucción "using", luego creará el segundo proceso hasta que finalice y le permita escribir el resultado en el mmf
uso BinaryWriter
, luego lea el resultado del mmf
proceso principal, también puede pase el mmf
nombre 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
childDir
y parentDirectory
son los nombres de carpeta de sus proyectos en la PC buena suerte :)