możesz użyć pamięci współdzielonej dla 2 procesów do komunikacji, sprawdź MemoryMappedFile
przede wszystkim utworzysz plik odwzorowany mmf
w pamięci w procesie nadrzędnym za pomocą instrukcji „using”, a następnie utworzysz drugi proces, aż zostanie zakończony, i pozwolisz mu zapisać wynik za mmf
pomocą BinaryWriter
, a następnie odczytać wynik za mmf
pomocą procesu nadrzędnego, możesz także przekazać mmf
nazwę za pomocą argumentów wiersza poleceń lub wpisać go na stałe.
upewnij się, że w przypadku korzystania z pliku odwzorowanego w procesie nadrzędnym proces potomny zapisuje wynik do pliku odwzorowanego przed zwolnieniem pliku odwzorowanego w procesie nadrzędnym
Przykład: proces nadrzędny
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();
}
Proces potomny
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();
}
aby użyć tego przykładu, musisz utworzyć rozwiązanie z 2 projektami w środku, a następnie pobrać wynik kompilacji procesu potomnego z% childDir% / bin / debug i skopiować go do% parentDirectory% / bin / debug, a następnie uruchomić projekt nadrzędny
childDir
i parentDirectory
to nazwy folderów twoich projektów na PC powodzenia :)