检测串口是否掉线的思路
思路记录下,免得忘记
设置spFlag =false;
在SendCmd时,spFlag=false;触发IsRec();
在Received事件中,spFlag=true;
实测:收不到数据是可以报错的。PC条件不够,没法测试接收到数据后是否正常,通过模拟点击一个按钮,设置spFlag=true后,没有触发MessagBox
1 public partial class Form1 : Form 2 { 3 private bool spFlag = false; 4 SerialPort sp = null; 5 private long startTime = 0; 6 public Form1() 7 { 8 InitializeComponent(); 9 sp = new SerialPort(); 10 sp.PortName = "COM1"; 11 if (sp.IsOpen) 12 { 13 sp.Close(); 14 } 15 sp.Open(); 16 17 sp.DataReceived += sp_DataReceived; 18 } 19 20 21 22 private void button1_Click(object sender, EventArgs e) 23 { 24 SendCmd(); 25 } 26 private void SendCmd() 27 { 28 spFlag = false; 29 sp.Write("aaaaaa"); 30 startTime = System.DateTime.Now.Ticks; 31 Thread recThread = new Thread(new ThreadStart(IsRec)); 32 recThread.IsBackground = true; 33 recThread.Start(); 34 } 35 36 void IsRec() 37 { 38 while ((System.DateTime.Now.Ticks - startTime) < 10000000*5) 39 { 40 if (spFlag) 41 { 42 break; 43 } 44 } 45 if(!spFlag) 46 MessageBox.Show("接收超时,串口可能掉线,"); 47 } 48 void sp_DataReceived(object sender, SerialDataReceivedEventArgs e) 49 { 50 spFlag = true; 51 } 52 53 private void button2_Click(object sender, EventArgs e) 54 { 55 this.spFlag = true; 56 } 57 }