У меня есть приложение C #, которое использует класс .NET SerialPort. В коде, который я использую для получения данных из последовательного порта, нет ничего особенного. Ключевые части:
//Open the port
comport.BaudRate = myPort.BaudRate;
comport.StopBits = StopBits.One;
comport.DataBits = 8;
comport.Parity = Parity.None;
comport.ReadTimeout = 20000;
comport.PortName = myPort.PortSystemName;
comport.Handshake = Handshake.None;
comport.RtsEnable = true;
comport.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
comport.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string msg = "";
try
{
msg = comport.ReadExisting();
if (comport.IsOpen)
comport.Close();
}
Этот код отлично работает в Windows XP . Однако в Windows 7 возникают проблемы, когда независимо от того, какие данные отправляются, он выбирает ТОЛЬКО первые четыре символа. Таким образом, в строке типа «123456» сообщение будет «1234». Устройство, которое собирает данные, - это RFIdeas pcProx, и я убедился, что данные в порядке. Я также убедился, что данные в гипертерминале выглядят нормально. Так что должно быть что-то странное в том, как я собираю данные в коде. Помощь!