串行端口DataReceived事件仅在Compact Framework中触发一次

时间:2012-03-13 13:17:59

标签: c# compact-framework

我们正在.net紧凑框架3.5上开发WinCE SerialPort应用程序。

在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 :(得分:0)

我们需要了解您的期望和数据的更多信息。您的Receive方法看起来像什么?

ReceivedBytesThreshold可以被认为是输入缓冲区的触发点。当缓冲区大小超过该范围时,仅在向前方向上,您将获得一个事件。在这种情况下,它意味着当接收缓冲区大小从0到1字节时,您将获得一个事件。你不会从200到201获得一个。你也不会为每个字节得到一个事件。

为了使此功能生效,当您收到事件时,您需要从缓冲区中读取所有数据,将其大小恢复为零并有效地“重置”事件触发器。