我正在尝试创建一个类似于 Hyperterminal 的终端来与 GSM 调制解调器(打开 AT Sierra 无线 sl8080)进行通信。调制解调器可以随机复位或通过发送到通信端口的命令来复位。当调制解调器重置时,所有通信都将丢失。我在用
private void serialPort1_DataReceived(object sender,System.IO.Ports.SerialDataReceivedEventArgs e)
{
Console.WriteLine(serialPort1.ReadExisting());
}
从设备中读取。但是重置后我可以做任何事情并且什么也得不到。
如果我在重置后尝试阅读,我会得到:
A first chance exception of type 'System.InvalidOperationException' occurred in System.dll
An unhandled exception of type 'System.InvalidOperationException' occurred in System.dll
Additional information: The port is closed.
如果我重置,则关闭端口我得到:
A first chance exception of type 'System.IO.IOException' occurred in System.dll
An unhandled exception of type 'System.IO.IOException' occurred in System.dll
Additional information: The requested resource is in use.
如果不完全关闭应用程序,我无法从这种状态中恢复。一年多来,我一直在努力解决这个问题。我想出了很多其他的解决方案。主要使用 Python 和 Java/RXTX,它们可以完美地处理设备的重置。我真的很难过,现在要解决这个问题更像是个人挑战。
我尝试使用 WMI 来检测 USB 设备的拔出并关闭 commport,但结果仍然相同。