c# – 串口ReadLine vs ReadExisting或如何正确从串口读取数据

前端之家收集整理的这篇文章主要介绍了c# – 串口ReadLine vs ReadExisting或如何正确从串口读取数据前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在从串行端口读取数据.数据脱离了规模.我现在使用Readline(),并且即使在我删除了DiscardInBuffer()之后,也会丢失数据.
从串行端口读取数据的正确方法是什么?网上有这么少的例子,我觉得这就像一些没有人想到的圣杯.

请帮忙吗

像串口似乎是一个反复无常的孩子.

C#,WinCE 5.0,HP瘦客户端,Compact框架2.0

  1. private void WeighSample()
  2. {
  3. this._processingDone = false;
  4. this._workerThread = new Thread(CaptureWeight);
  5. this._workerThread.IsBackground = true;
  6. this._workerThread.Start();
  7. } //end of WeighSample()
  8.  
  9.  
  10. private void CaptureWeight()
  11. {
  12. globalCounter++;
  13. string value = "";
  14.  
  15.  
  16. while (!this._processingDone)
  17. {
  18. try
  19. {
  20.  
  21. value = this._sp.ReadLine();
  22.  
  23. if (value != "")
  24. {
  25. if (value == "ES")
  26. {
  27. _sp.DiscardInBuffer();
  28. value = "";
  29. }
  30. else
  31. {
  32. this.Invoke(this.OnDataAcquiredEvent,new object[] { value });
  33. }
  34. }
  35. }
  36. catch (TimeoutException)
  37. {
  38. //catch it but do nothing
  39. }
  40. catch
  41. {
  42. //reset the port here?
  43. MessageBox.Show("some other than timeout exception thrown while reading serial port");
  44. }
  45. }
  46.  
  47.  
  48. } //end of CaptureWeight()

需要注意的是我的应用程序是当光标跳到文本框时启动线程(weightSample).这样做的原因是重量也可以手动输入(部分req的).所以我不提前知道用户是否要在平衡上按PRINT或键入重量.在获取数据后的任何一种情况下,我退出工作线程.另外请注意,我没有使用串口事件DataReceived,因为我被告知不可靠.

任何意见/想法欢迎.这是我第一次使用串口.

解决方法

我从来没有运气ReadLine工作.只要在数据可用时读取本地缓冲区,然后使用单独的线程扫描数据并自行查找换行符.

猜你在找的C#相关文章