我们正在.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上运行正常。可能是可能的原因。
答案 0 :(得分:0)
我们需要了解您的期望和数据的更多信息。您的Receive
方法看起来像什么?
ReceivedBytesThreshold
可以被认为是输入缓冲区的触发点。当缓冲区大小超过该范围时,仅在向前方向上,您将获得一个事件。在这种情况下,它意味着当接收缓冲区大小从0到1字节时,您将获得一个事件。你不会从200到201获得一个。你也不会为每个字节得到一个事件。
为了使此功能生效,当您收到事件时,您需要从缓冲区中读取所有数据,将其大小恢复为零并有效地“重置”事件触发器。