gpt4 book ai didi

c# - 使用 MemoryMappedFile 共享变量会出错

转载 作者:行者123 更新时间:2023-11-30 16:57:02 25 4
gpt4 key购买 nike

我需要将应用程序“A”中的变量值共享给同一系统上的不同应用程序。我只需要根据要求使用 MemoryMappedFiles。我创建了另一个简单的应用程序“B”,它从应用程序 A 中读取共享变量的值。但是应用“B”给出了错误

Unable to find the specified file.

使用 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 读取共享变量时出现错误

Unable to find the specified file

我需要在txt文件中写入变量值然后分享吗?

最佳答案

内存映射文件有两种

  • 持久内存映射文件
  • 非持久内存映射文件

您正在创建非持久内存映射文件,因此当最后一个进程关闭然后处理 MMF 时,它将被销毁。您通过 using 语句调用 Dispose 来关闭句柄,因此 MMF 被销毁。

您要么需要保持 MMF 打开,要么使用持久内存映射文件。要使 MMF 保持打开状态,请不要丢弃它。

For more information

关于c# - 使用 MemoryMappedFile 共享变量会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27143930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com