シリアルポートがオフラインかどうかを検出する考え方

7409 ワード

忘れないように考えを記録する
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