我在网上找了很多源码,没有一个可以用2个程序实现互相读写的共享内存功能,一般只能单向传递,没有任何意义,于是我自己封装了一个类,但是看起来没任何问题,就是不能共享,现在我把代码贴出来,请大神帮忙看看 using System; using System.IO; using System.IO.MemoryMappedFiles; using System.Runtime.InteropServices; using System.Threading; namespace Demo { public class ShareMemory { private MemoryMappedFile mmf; public string MapName = "future"; public int MaxSize = 10 * 1024 * 1024; private int m_nState = 0; private int nDataLen = 0; public ShareMemory() { } public void Create() { mmf = MemoryMappedFile.CreateOrOpen(MapName, MaxSize, MemoryMappedFileAccess.ReadWrite); } public void Open() { mmf = MemoryMappedFile.OpenExisting(MapName); } /// <summary> /// 析构函数 /// </summary> ~ShareMemory() { mmf.Dispose(); } ///读数据 public void Read(ref byte[] Data) { m_nState = 2; using (var stream = mmf.CreateViewStream(0, nDataLen)) //创建文件内存视图流 基于流的操作 { var reader = new BinaryReader(stream); reader.Read(Data, 0,nDataLen); } m_nState = 0; } public void Clear() { m_nState = 3; using (var stream = mmf.CreateViewStream(0,MaxSize)) //创建文件内存视图流 基于流的操作 { var writer = new BinaryWriter(stream); byte[] Data=new byte[MaxSize]; writer.Write(Data, 0, MaxSize); nDataLen = 0; } m_nState = 0; } //将数据写入共享内存中 public void Write(byte[] Data) { m_nState = 1; using (var stream = mmf.CreateViewStream(0,Data.Length)) //创建文件内存视图流 基于流的操作 { var writer = new BinaryWriter(stream); writer.Write(Data,0,Data.Length); nDataLen = Data.Length; } m_nState = 0; } public int GetDataLenth() { return nDataLen; } /// <summary> /// 0空闲,1写,2读,3清除中 /// </summary> /// <returns></returns> public int GetState() { return m_nState; } } } |
C#共享内存两个进程软件互相读写实现类
最新推荐文章于 2024-08-08 02:46:19 发布