2012-03-13 62 views
0

我们正在开发WinCE SerialPort应用程序.net compact framework 3.5。串行端口DataReceived事件只能在Compact Framework中触发

在serialPort类中我们有DataReceived事件,所幸它只发射一次。

我们的SerialPort设置如下:

_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

通常,这发生在您的DataReceived事件处理程序方法因某些原因未完成时发生。从这里看不到它。我的接收方法中的 – 2012-03-13 13:41:50

+0

将会记录正在获取的数据。 private void Receive(object sender,SerialDataReceivedEventArgs e) { _receivedString = _port.ReadExisting(); _log.WriteFile(“RX:”+ _receivedString); } – Siddharood 2012-03-13 13:54:53

回答

0

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

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

所以为了使这个效果更好,当你收到事件时,你需要读取所有数据,使其大小回到零,并有效地“重置”事件触发器。

+0

private void Receive(object sender,SerialDataReceivedEventArgs e) {_receivedString = _port.ReadExisting(); _log.WriteFile(“RX:”+ _receivedString); } – Siddharood 2012-03-13 13:53:14

相关问题