シリアルポートがオフラインかどうかを検出する考え方
7409 ワード
忘れないように考えを記録する
spFlag=falseを設定します.
SendCmdでspFlag=false;IsRec()をトリガーします.
ReceivedイベントではspFlag=true;
実測:データが届かないと、間違いを報告することができます.PCの条件が足りなくて、データを受け取った後に正常かどうかをテストすることができなくて、模擬を通じて1つのボタンをクリックして、spFlag=trueを設定した後に、MessagBoxを触発していません
転載先:https://www.cnblogs.com/czicy/p/9187940.html
spFlag=falseを設定します.
SendCmdでspFlag=false;IsRec()をトリガーします.
ReceivedイベントではspFlag=true;
実測:データが届かないと、間違いを報告することができます.PCの条件が足りなくて、データを受け取った後に正常かどうかをテストすることができなくて、模擬を通じて1つのボタンをクリックして、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 }
転載先:https://www.cnblogs.com/czicy/p/9187940.html