2012-03-13 60 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

相關問題