Sie können gemeinsamen Speicher verwenden, damit die 2 Prozesse miteinander kommunizieren können, schauen Sie sich MemoryMappedFile
an
Sie erstellen hauptsächlich eine Memory-Mapped-Datei mmf
im Elternprozess mit der "using"-Anweisung, erstellen dann den zweiten Prozess, bis er beendet ist, und lassen ihn das Ergebnis mit BinaryWriter
in die mmf
schreiben und lesen Sie dann das Ergebnis aus der mmf
mit dem Elternprozess. Sie können auch den Namen der mmf
über Befehlszeilenargumente oder fest codieren.
Stellen Sie sicher, dass der Kindprozess das Ergebnis in die Memory-Mapped-Datei schreibt, bevor die Memory-Mapped-Datei im Elternprozess freigegeben wird
Beispiel: Elternprozess
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("Starten des Kindprozesses");
// Befehlszeilenargumente sind durch ein Leerzeichen getrennt
Process p = Process.Start("ChildProcess.exe", "memfile");
Console.WriteLine("Warten auf das Beenden des Kindes");
p.WaitForExit();
Console.WriteLine("Kind verstorben");
using (MemoryMappedViewStream stream = mmf.CreateViewStream())
{
BinaryReader reader = new BinaryReader(stream);
Console.WriteLine("Ergebnis:" + reader.ReadInt32());
}
}
Console.WriteLine("Drücken Sie eine beliebige Taste, um fortzufahren...");
Console.ReadKey();
}
Kindprozess
private static void Main(string[] args)
{
Console.WriteLine("Kindprozess gestartet");
string mmfName = args[0];
using (MemoryMappedFile mmf = MemoryMappedFile.OpenExisting(mmfName))
{
int readValue;
using (MemoryMappedViewStream stream = mmf.CreateViewStream())
{
BinaryReader reader = new BinaryReader(stream);
Console.WriteLine("Kind liest: " + (readValue = reader.ReadInt32()));
}
using (MemoryMappedViewStream input = mmf.CreateViewStream())
{
BinaryWriter writer = new BinaryWriter(input);
writer.Write(readValue * 2);
}
}
Console.WriteLine("Drücken Sie eine beliebige Taste, um fortzufahren...");
Console.ReadKey();
}
Um dieses Beispiel zu verwenden, müssen Sie eine Lösung mit 2 Projekten erstellen, dann nehmen Sie das Build-Ergebnis des Kindprozesses aus %childDir%/bin/debug und kopieren es nach %parentDirectory%/bin/debug und führen dann das Elternprojekt aus
childDir
und parentDirectory
sind die Ordnernamen Ihrer Projekte auf dem PC Viel Glück :)