Последовательный порт DataReceived генерирует событие только один раз в Compact Framework - PullRequest
0 голосов
/ 13 марта 2012

Мы разрабатываем приложение WinCE SerialPort на .net compact framework 3.5.

В классе serialPort у нас есть событие DataReceived, к сожалению, оно запускается только один раз.

Наши настройки последовательного порта приведены ниже:

    _com = new SerialPort();
            _com.PortName = str_comport;
            _com.BaudRate = pBaudRate;
            _com.ReadTimeout = 1000 * 10 * 1;
            _com.WriteTimeout = 1000 * 10 * 1;
            _com.Handshake = Handshake.None;
            _com.ReceivedBytesThreshold = 1;
            _com.RtsEnable = true;
            _com.DtrEnable = true;
            _com.Parity = pParity;
            _com.DataBits = pDataBits;
            _com.StopBits = pStopBits;
            _com.DataReceived += new SerialDataReceivedEventHandler(this.Receive);
    _com.Open();

....

private void Receive(object sender, SerialDataReceivedEventArgs e) 
{ 
    _receivedString = _port.ReadExisting(); 
    _log.WriteFile("RX : " + _receivedString); 
}

Мы попытались сначала открыть порт и присоединить полученные данные. Событие также, но бесполезно.

, и тот же код отлично работает на Windows XP / Windows 7 Machine. Что может бытьвозможная причина.

1 Ответ

0 голосов
/ 13 марта 2012

Нам нужно больше узнать о том, как выглядят ваши ожидания и поступающие данные. Как выглядит ваш Receive метод?

ReceivedBytesThreshold можно рассматривать как точку запуска на входном буфере. Когда размер буфера превышает этот, только в прямом направлении, вы получаете событие. В этом случае это означает, что когда размер приемного буфера изменяется от 0 до 1 байта, вы получите событие. Вы не получите одно, скажем, от 200 до 201. Вы также не получите событие для каждого байта.

Таким образом, чтобы сделать это эффективным, когда вы получаете событие, вам нужно прочитать все данные из буфера, вернуть его размер к нулю и эффективно "сбросить" триггер события.

...