我有通过USB串行通信连接到PC的设备。我正在执行以下步骤
所以我认为我有办法有力地关闭通信端口。
感谢任何帮助
由于
答案 0 :(得分:2)
如果您通过串口与硬件进行通信并使用SerialEventListener,那么我认为会发生Serial.DATA_BREAK(不记得具体名称)事件。您可以在SerialEvent方法中捕获此信息并关闭从程序到端口的连接。希望这有助于您在断开硬件时强行关闭连接。
答案 1 :(得分:2)
我找到了解决方案,虽然它不能称为标准解决方案但是我对该解决方案没有任何问题,因为它解决了我的问题,解决方案是按照belove步骤
第一步: -
class clsRS232 : IDisposable
{
private SerialPort myPort;
public clsRS232()
{
myPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
}
public void OpenPort()
{
myPort.Open();
}
public void SendFunc(string str)
{
myPort.Write(str);
}
public string ReadFunc()
{
return myPort.ReadExisting();
}
public void Dispose()
{
myPort.Dispose();
}
}
第二步: -
using (clsRS232 mySerialPort = new clsRS232())
{
lock (mySerialPort)
{
mySerialPort.OpenPort();
mySerialPort.SendFunc(commandArg);//here "commandArg" is command or data you want to send to serial port
this.serialPortObj_DataReceived(mySerialPort.ReadFunc()); //here "serialPortObj_DataReceived()" is a user define method where received data will be passed
}
}
答案 2 :(得分:1)
完成后,你是否在comport上运行.Close()?
理想情况下,您必须先关闭(),然后才能关闭电源或断开设备。
另外,您使用的是SerialPort.GetPortNames()吗?如果您正在使用USB comports并将它们拉出(或关闭电源),然后再重新插入它们,它们将获得Windows提供的新名称。
然后你必须用SerialPort.GetPortNames()重新枚举它们,以检查新的COM名称是什么。
即,您的设备可能在首次开机时被称为COM3,在第二次开机时可能被称为COM4,依此类推。经过多次循环后,它可能会再次被称为COM3。
这就是为什么你需要拨打GetPortNames,以查明是否出现了“新”设备。 (这不是一个真正的新设备,它是你的设备,它可以重新启动。)
答案 3 :(得分:0)
我知道问题已有几年了,但前几天我遇到了同样的问题。 我帮助的是在close()之前丢弃输入和输出缓冲区。
this.serialPort.DiscardInBuffer();
this.serialPort.DiscardOutBuffer();
this.serialPort.Close();