Vous pouvez utiliser la mémoire partagée pour que les deux processus communiquent entre eux. MemoryMappedFile
vous allez principalement créer un fichier mappé en mémoire mmf
dans le processus parent à l'aide de l'instruction "using", puis créez le second processus jusqu'à ce qu'il se termine et laissez-le écrire le résultat dans l'instruction "using". mmf
en utilisant BinaryWriter
puis lire le résultat dans le fichier mmf
à l'aide du processus parent, vous pouvez également passer l'option mmf
en utilisant des arguments de ligne de commande ou en le codant en dur.
lorsque vous utilisez le fichier mappé dans le processus parent, veillez à ce que le processus enfant écrive le résultat dans le fichier mappé avant que le fichier mappé ne soit libéré dans le processus parent.
Exemple : le processus des parents
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();
}
Processus de l'enfant
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();
}
pour utiliser cet exemple, vous devez créer une solution avec 2 projets à l'intérieur, puis vous prenez le résultat de la construction du processus enfant à partir de %childDir%/bin/debug et le copier à %parentDirectory%/bin/debug puis exécuter le projet parent
childDir
et parentDirectory
les noms des dossiers de vos projets sur le pc. bonne chance :)