Sie können den gemeinsam genutzten Speicher für die beiden Prozesse verwenden, über die kommuniziert werden soll MemoryMappedFile
Sie erstellen hauptsächlich eine Speicherzuordnungsdatei mmf
im übergeordneten Prozess mit der Anweisung "using". Erstellen Sie dann den zweiten Prozess, bis er beendet wird, und lassen Sie das Ergebnis in den mmf
using schreiben. BinaryWriter
Lesen Sie dann das Ergebnis aus mmf
dem übergeordneten Prozess Übergeben Sie den mmf
Namen mit Befehlszeilenargumenten oder geben Sie ihn fest ein.
Stellen Sie bei Verwendung der zugeordneten Datei im übergeordneten Prozess sicher, dass der untergeordnete Prozess das Ergebnis in die zugeordnete Datei schreibt, bevor die zugeordnete Datei im übergeordneten Prozess freigegeben wird
Beispiel: übergeordneter Prozess
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();
}
Untergeordneter Prozess
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();
}
Um dieses Beispiel zu verwenden, müssen Sie eine Lösung mit 2 Projekten erstellen. Anschließend nehmen Sie das Erstellungsergebnis des untergeordneten Prozesses aus% childDir% / bin / debug und kopieren es in% parentDirectory% / bin / debug. Führen Sie dann das aus übergeordnetes Projekt
childDir
und parentDirectory
sind die Ordnernamen Ihrer Projekte auf dem PC viel Glück :)