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 mmfdans 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' mmfaide BinaryWriter, puis lire le résultat à l' mmfaide du processus parent, vous pouvez également passez le mmfnom 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
childDiret parentDirectorysont les noms de dossier de vos projets sur le pc bonne chance :)