打开虚拟COM端口时收到IOException

时间:2012-02-16 01:31:09

标签: c# serial-port ioexception

我正在编写需要从NMEA GPS设备接收输入的程序。 NMEA标准要求使用其中一个COM端口进行通信。

以下是给我带来麻烦的代码摘录:

public int BaudRate { get; set; }

private SerialPort comm;

public string CommPort { get; set; }

protected override void Initialize() {
        comm = new SerialPort();

        comm.BaudRate = BaudRate;
        comm.DataBits = 8;
        comm.NewLine = "\r\n";
        comm.Parity   = Parity.None;
        comm.PortName = ComPort;
        comm.StopBits = StopBits.One;

        comm.Open();
}

在我的单元测试方法中,我有以下代码:

NMEAGPS gps = new NMEAGPS();
gps.ComPort = "COM3";
gps.BaudRate = 4800;
gps.Start();

我的第一个代码片段中的Intiialize方法由Start方法调用。

调用comm.Open()时发生错误。这是例外情况:

System.IO.IOException was caught
  Message=The I/O operation has been aborted because of either a thread exit or an application request.

  Source=System
  StackTrace:
       at System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
       at System.IO.Ports.InternalResources.WinIOError()
       at System.IO.Ports.SerialStream.InitializeDCB(Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Boolean discardNull)
       at System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace)
       at System.IO.Ports.SerialPort.Open()
       at LPRCore.Devices.NMEAGPS.Initialize() in D:\ElsagTFS\EOC4\Client\LPRCore Plugin GPS\NMEAGPS.cs:line 385
       at LPRCore.Module.InternalPrestart() in D:\ElsagTFS\EOC4\Client\LPRCore\Module.cs:line 413

这是我第一次在.NET中完成任何COM编程。我不知道自己可能做错了什么。有没有人有任何想法?

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法。事实证明,原因是我为GPS安装的驱动程序软件。它是Vista的旧驱动程序。我下载了一个更新的Windows 7驱动程序(我正在我的PC上运行)并安装它。这解决了问题

谢谢大家。