C#串口问题

时间:2013-08-23 03:55:20

标签: c# resources serial-port wmi gsm

我正在尝试创建一个类似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,但结果仍然相同。

1 个答案:

答案 0 :(得分:0)

您是否尝试过处理SerialPort对象而不是关闭它?

http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.errorreceived.aspx

  

如果在读取操作期间SerialPort对象被阻止,请不要中止该线程。而是关闭基本流或处理SerialPort对象。