è possibile utilizzare la memoria condivisa per i 2 processi per comunicare attraverso, check out MemoryMappedFile
creerai principalmente un file mappato in memoria mmf
nel processo padre usando l'istruzione "using", quindi creerai il secondo processo fino a quando non termina e lascerai che scriva il risultato mmf
sull'uso BinaryWriter
, quindi leggi il risultato mmf
dall'uso del processo parent, puoi anche passa ilmmf
nome usando gli argomenti della riga di comando o codificarlo.
quando si utilizza il file mappato nel processo padre, assicurarsi che il processo figlio scriva il risultato nel file mappato prima che il file mappato venga rilasciato nel processo parent
Esempio: processo parent
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 figlio
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();
}
per utilizzare questo esempio, dovrai creare una soluzione con 2 progetti all'interno, quindi prendere il risultato di generazione del processo figlio da% childDir% / bin / debug e copiarlo in% parentDirectory% / bin / debug quindi eseguire il progetto principale
childDir
e parentDirectory
sono i nomi delle cartelle dei tuoi progetti sul pc buona fortuna :)