gpt4 book ai didi

c# - 为什么访问 com 端口被拒绝?

转载 作者:可可西里 更新时间:2023-11-01 08:33:41 24 4
gpt4 key购买 nike

代码:

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 阅读器打开同一个文件并拆分 xml,因为它有多个根,然后获取每个新拆分 xml 上的节点值并通过串行发送。它在第一个拆分 xml 上工作,它的节点通过串行发送,然后它停止,并在尝试将第二个节点写入串行时拒绝访问 com 端口消息。

我有另一个使用相同序列代码制作的应用程序,它工作正常(我只是厌倦了它然后关闭了它。)...所以很奇怪。

最佳答案

一个串口只能打开一次。但是您的代码在 while 循环中有 Open() 调用。这仅适用于循环的第一次传递,第二次传递时的 kaboom 。 @cdhowie 的解决方案也不起作用,SerialPort 有一个文档警告的怪癖(又名错误)。在调用 Dispose() 或 Close() 之后需要时间让工作线程退出。时间量未指定且不可预测。

真正的解决方案很简单,只需将 Open() 调用移到 while 循环之前即可。

关于c# - 为什么访问 com 端口被拒绝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7219653/

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