ви можете використовувати спільну пам’ять для двох процесів для спілкування, перевірте MemoryMappedFile
Ви в основному створите файл, відображений mmf
у пам'яті в батьківському процесі, використовуючи оператор "using", потім створіть другий процес, поки він не припиниться, і дозвольте йому записати результат у mmf
користування BinaryWriter
, потім прочитайте результат з mmf
використанням батьківського процесу, ви також можете пройтиmmf
ім'я, використовуючи аргументи командного рядка або жорсткий код.
переконайтесь, що при використанні відображеного файлу в батьківському процесі, що ви змушуєте дочірній процес записувати результат у відображений файл до того, як відображений файл буде випущений у батьківському процесі
Приклад: батьківський процес
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();
}
Дитячий процес
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();
}
щоб використовувати цей зразок, вам потрібно буде створити рішення з двома проектами всередині, потім ви берете результат збірки дочірнього процесу з% childDir% / bin / debug і копіюєте його в% parentDirectory% / bin / debug, після чого запустіть команду батьківський проект
childDir
і parentDirectory
назви папок ваших проектів на ПК удачі :)