Я пишу программу, которая должна получать входные данные от устройства GPS NMEA. Стандарт 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
Это первый раз, когда я занимаюсь программированием COM в .NET. Я не понимаю, что я мог делать неправильно. У кого-нибудь есть идеи?
Tony