有没有办法在两个不同的应用程序之间共享不可序列化的控制对象。
我使用下面的代码在两个应用程序之间共享数据,它运行正常。 我的问题是我需要在这些应用程序之间共享不可序列化的对象。
using (MemoryMappedFile mmf = MemoryMappedFile.CreateNew("testmap", 10000))
{
bool mutexCreated;
Mutex mutex = new Mutex(true, "testmapmutex", out mutexCreated);
using (MemoryMappedViewStream stream = mmf.CreateViewStream())
{
BinaryWriter writer = new BinaryWriter(stream);
writer.Write(1);
}
mutex.ReleaseMutex();
string path = @"Second Application's path";
//Run second application
Process pr = new Process();
ProcessStartInfo prs = new ProcessStartInfo();
prs.FileName = path;
pr.StartInfo = prs;
bool ret = pr.Start();
mutex.WaitOne();
using (MemoryMappedViewStream stream = mmf.CreateViewStream())
{
BinaryReader reader = new BinaryReader(stream);
MessageBox.Show(String.Format("Process A says: {0}", reader.ReadBoolean()));
MessageBox.Show(String.Format("Process B says: {0}", reader.ReadBoolean()));
}
mutex.ReleaseMutex();
}
try
{
using (MemoryMappedFile mmf = MemoryMappedFile.OpenExisting("testmap"))
{
Mutex mutex = Mutex.OpenExisting("testmapmutex");
mutex.WaitOne();
using (MemoryMappedViewStream stream = mmf.CreateViewStream(1, 0))
{
BinaryWriter writer = new BinaryWriter(stream);
writer.Write(0);
}
mutex.ReleaseMutex();
}
}
catch (FileNotFoundException)
{
MessageBox.Show("Memory-mapped file does not exist. Run Process A first.");
}
任何人都可以帮助我解决问题。
答案 0 :(得分:0)
据我所知,内存映射文件不能直接包含实时管理对象。有两种方法可以使用内存映射文件:使用 MemoryMappedViewStream (我们的示例正在执行),或使用 MemoryMappedViewAccessor 。后者允许您将其视为内存的大缓冲区,使用 ReadDouble(offset)和 Write(offset,doubleValue)等调用来读取和写入内存。还有用于读取和写入数组的存取方法。