iletişim kurmak, kontrol etmek için 2 işlem için paylaşılan belleği kullanabilirsiniz MemoryMappedFile
esas mmf
olarak üst işlemde "using" deyimini kullanarak bir bellek eşlemeli dosya oluşturacak, sonra sona erene kadar ikinci işlemi oluşturacak ve sonucu mmf
kullanarak yazmasına izin verecek BinaryWriter
, ardından mmf
üst işlemi kullanarak sonucu okuyacaksınız, ayrıca Geçmmf
komut satırı argümanları veya sabit kod kullandığını isim.
Eşlenen dosyayı üst işlemde kullanırken, eşlenen dosya üst işlemde serbest bırakılmadan önce alt işlemi eşlenen dosyaya yazdığınız sonucu aldığınızdan emin olun
Örnek: üst süreç
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();
}
Çocuk süreci
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();
}
Bu örneği kullanmak için, içinde 2 proje bulunan bir çözüm oluşturmanız gerekir, ardından% childDir% / bin / debug öğesinden alt sürecin derleme sonucunu alıp% parentDirectory% / bin / debug öğesine kopyalayıp ardından ana proje
childDir
ve parentDirectory
pc iyi şanslar projelerinizin klasör isimleri :)