代码:
static void Main(string[] args)
{
Console.WriteLine("Memory mapped file reader started");
using (var file = MemoryMappedFile.OpenExisting("AIDA64_SensorValues"))
{
using (var readerz = file.CreateViewAccessor(0, 0))
{
var bytes = new byte[567];
var encoding = Encoding.ASCII;
readerz.ReadArray<byte>(0, bytes, 0, bytes.Length);
File.WriteAllText("C:\\myFile.txt", encoding.GetString(bytes));
var readerSettings = new XmlReaderSettings { ConformanceLevel = ConformanceLevel.Fragment };
using (var reader = XmlReader.Create("C:\\myFile.txt", readerSettings))
{
while (reader.Read())
{
using (var fragmentReader = reader.ReadSubtree())
{
if (fragmentReader.Read())
{
reader.ReadToFollowing("value");
SerialPort port = new SerialPort("COM2", 9600, Parity.None, 8, StopBits.One);
port.Open();
port.Write(reader.ReadElementContentAsString() + ",");
}
}
}
}
}
}
Console.WriteLine("Press any key to exit ...");
Console.ReadLine();
}
该程序从共享内存读取数据,将共享内存中的数据写入文件。然后使用 XML Reader 打开该文件并拆分 XML,因为它具有多个根节点。接着在每个新的拆分 XML 中获取一个节点的值,并通过串口发送。在第一个拆分的 XML 上运行正常且其节点已经被发送到串口,但是当尝试将第二个节点写入串口时,会收到访问 COM 端口被拒绝的消息。
我创建了另一个与串口代码相同的应用程序,它可以正常工作(我只是尝试了一下然后关闭了它)。所以这很奇怪。