我正在尝试创建一个类似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,但结果仍然相同。
答案 0 :(得分:0)
您是否尝试过处理SerialPort对象而不是关闭它?
http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.errorreceived.aspx
如果在读取操作期间SerialPort对象被阻止,请不要中止该线程。而是关闭基本流或处理SerialPort对象。