我需要将应用程序“ A”的变量值共享给同一系统上的不同应用程序。我只需要按照要求使用MemoryMappedFiles。我创建了另一个简单的应用程序“ B”,该应用程序从应用程序A读取共享变量的值。但是应用程序“ B”给出了错误
找不到指定的文件。
使用VS 2012用C#编写的示例应用程序A和B:
应用程序A的按钮单击事件可共享变量名称:
private void button1_Click(object sender, EventArgs e)
{
string Name = txtName.Text.ToString();
int howManyBytes = Name.Length * sizeof(Char) + 4;
label1.Text = howManyBytes.ToString();
using (var MyText = MemoryMappedFile.CreateOrOpen("MyGlobalData", howManyBytes, MemoryMappedFileAccess.ReadWrite))
{
byte[] array1 = new byte[howManyBytes];
array1 = GetBytes(Name);
using (var accessor = MyText.CreateViewAccessor(0, array1.Length))
{
accessor.WriteArray(0, array1, 0, array1.Length);
}
}
}
static byte[] GetBytes(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
return bytes;
}
应用程序B的按钮单击事件读取共享变量MyGlobalData:
try
{
using (var mmf = MemoryMappedFile.OpenExisting("MyGlobalData"))
{
using (var accessor = mmf.CreateViewAccessor(0, 34))
{
byte[] array1 = new byte[34];
accessor.ReadArray(0, array1, 0, array1.Length);
string result = System.Text.Encoding.UTF8.GetString(array1);
txtName.Text = result;
}
}
}
catch (Exception ex)
{
MessageBox.Show(" Error :- " + ex.Message.ToString());
}
尝试从App B读取共享变量时,它给出了错误
找不到指定的文件
我需要在txt文件中写入变量值然后共享它吗?
内存映射文件有两种类型
您正在创建非持久内存映射文件,因此,当最后一个关闭该MMF句柄的进程时,它将被销毁。Dispose
通过使用using语句调用它来关闭句柄,从而破坏了MMF。
您要么需要保持MMF打开状态,要么使用Persisted内存映射文件。要保持MMF处于打开状态,请不要对其进行处置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句