vous pouvez utiliser la mémoire partagée pour que les 2 processus communiquent, consultez MemoryMappedFile
vous allez principalement créer un fichier mappé en mémoire mmf
dans le processus parent en utilisant l'instruction "using", puis créer le deuxième processus jusqu'à ce qu'il se termine et le laisser écrire le résultat à l' mmf
aide BinaryWriter
, puis lire le résultat à l' mmf
aide du processus parent, vous pouvez également passez le mmf
nom en utilisant des arguments de ligne de commande ou codez-le en dur.
assurez-vous que lorsque vous utilisez le fichier mappé dans le processus parent, vous faites en sorte que le processus enfant écrive le résultat dans le fichier mappé avant que le fichier mappé ne soit publié dans le processus parent
Exemple: processus 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();
}
Processus 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 de% childDir% / bin / debug et le copiez dans% parentDirectory% / bin / debug puis exécutez le projet parent
childDir
et parentDirectory
sont les noms de dossier de vos projets sur le pc bonne chance :)