思路记录下,免得忘记
设置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 }