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 mmfim übergeordneten Prozess mit der Anweisung "using". Erstellen Sie dann den zweiten Prozess, bis er beendet wird, und lassen Sie das Ergebnis in den mmfusing schreiben. BinaryWriterLesen Sie dann das Ergebnis aus mmfdem übergeordneten Prozess Übergeben Sie den mmfNamen 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
childDirund parentDirectorysind die Ordnernamen Ihrer Projekte auf dem PC viel Glück :)