gpt4 book ai didi

c# - 在 com 端口 c# 上拒绝访问

转载 作者:太空宇宙 更新时间:2023-11-03 15:22:44 24 4
gpt4 key购买 nike

我一直在为机器编写一些代码。它必须与 RS485 通信,我可以为它使用普通的串行通信,正如 .net 提供的那样

但是由于硬件可能会出现故障,我必须构建测试例程。所以我编写了重新检测可用组件的例程。这会用它们的字符串名称填充列表“allComPorts”,然后使用数字 updown 根据其可用 comports 的列表索引来选择 com 端口。 (是的,这听起来有点复杂,但由于其他原因,我使用了数字上调来进行选择)。

问题是这个函数只在第一次运行。如果我再次调用该函数,我会被拒绝访问,因为它接缝已经打开。在不同的地方尝试了 RS485Port.Close(),但问题是如果它还没有打开 jet 就会崩溃(鸡蛋问题)。

我打开comport的代码是这样的

    private void RS485Activate()
{
lblNoRS485Communication.Visible = false;
if (cmbRS485Port.Value != 0) // if 0 then there are no serial ports
{
//rs485Port is a global declared as > System.IO.Ports.SerialPort RS485Port;
RS485Port = new System.IO.Ports.SerialPort(allComPorts[(int)cmbRS485Port.Value - 1]);
if (!RS485Port.IsOpen)
{
// RS485Port.Close();
// RS485Port = new System.IO.Ports.SerialPort(allComPorts[(int)cmbRS485Port.Value - 1]);
RS485Port.BaudRate = 9600;
RS485Port.Parity = System.IO.Ports.Parity.None;
RS485Port.StopBits = System.IO.Ports.StopBits.One;
RS485Port.DataBits = 8;
RS485Port.Handshake = System.IO.Ports.Handshake.None;
RS485Port.RtsEnable = true;
RS485Port.Open(); <== it crashes here with access denied
}
}
else
{
MessageBox.Show("There is no COM port detected, the program will work but it cannot control any machinery", "WARNING", MessageBoxButtons.OK, MessageBoxIcon.Warning);
lblNoRS485Communication.Visible = true; // another warning
}
}

最佳答案

我不喜欢这个样子,所以我希望有更好的方法。但是作为一种解决方法,使用 try-catch 构造它现在首先尝试关闭,(如果 try-catch 尚未初始化,它确实可以防止 close() 错误。好吧,我不喜欢这种解决方法,所以更好的解决方案欢迎使用,我不认为代码应该预测错误并基于错误。(或者现在使用 .net 可以吗?)

            //...                
try
{ RS485Port.Close(); }
catch
{ }
RS485Port = new System.IO.Ports.SerialPort(allComPorts[(int)cmbRS485Port.Value - 1]);
if (!RS485Port.IsOpen)
{
// RS485Port.Close();
// RS485Port = new System.IO.Ports.SerialPort(allComPorts[(int)cmbRS485Port.Value - 1]);
RS485Port.BaudRate = 9600;
RS485Port.Parity = System.IO.Ports.Parity.None;
RS485Port.StopBits = System.IO.Ports.StopBits.One;
RS485Port.DataBits = 8;
RS485Port.Handshake = System.IO.Ports.Handshake.None;
RS485Port.RtsEnable = true;
RS485Port.Open();
}

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

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