Вы можете использовать общую память для двух процессов, чтобы общаться, проверить 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
имена папок ваших проектов на пк удачи :)