ดูจากโค้ดแล้ว ถ้าใช้เมธอด ReadExisting() จะหมายความว่าให้อ่านค่าที่รับเข้ามาทั้งหมดจาก port ในครั้งนั้นๆซึ่งในแต่ละครั้งมี่ port ส่งค่ามาที่โปรแกรมก็จะแสดงค่าที่รับเข้ามาทั้งหมดทุกครั้ง
ดังนั้นถ้าไม่ต้องการให้รับค่าเข้ามาทังหมดผมว่าน่าจะใช้ ReadLine() แต่เมธอดนี้ก็มีปัญหาเนื่องจากว่าจะมีการส่งค่าอักขระ \n ทุกครั้งที่มีการรับค่าเข้ามาหมายความว่าถ้ารับค่ามาครั้งนึ่งเช่น 6200 จะต้องสั่งใช้ทาง hardware มัน reset ค่าที่ส่งไปก่อนจึ่งจะส่งค่าต่อไป ( 6109 ) เข้ามาได้ซึ่งผมไม่แนะนำวิธีนีนะครับเพราะผมเคยลองเข้ามันมีปัญหาตามมา ผมอยากแนะนำให้รับค่าเข้ามาเป็น byte มากกว่าเนื่องจากว่า จะได้ดักจับค่า ที่ส่งมาจาก port ได้ดังนี้ int bytes = comport.BytesToRead; พอเราได้ค่า bytes นี้มาแล้วเราก้นำค่านี้เก็บไว้ในหน่วยความจะ buffer ดังนี้
byte[] buffer = new byte[bytes];
comport.Read(buffer, 0, bytes);
หลังจากนั้นก็ใช้คำสั่ง while เพื่อวนลูปหาตำแหน่งค่าที่รับเข้ามาว่าจะให้แสดงข้อมูลถึงค่าใหนแล้วพอแสดงถึงค่านั้นก็ให้หยุดแล้วนำค่านั้นเก็บใน textbox แล้วก็วนลูปเพื่อหาค่าต่อไป (ยังอยู่ใน ลูป while ) แต่ผมไม่รู้ว่าคุณ itzone รู้ค่าในหน่วย byte ที่รับค่ามาจาก serial port หรือเปล่าเพราะวิธีนีจะต้องรู้ค่าใส่ส่วนของ start frame และ stop frame ที่ส่งมาจาก serialport ถ้ารู้ค่าแล้วถึงใช้วิธีที่ผมบอกได้เนื่องจากว่าจะเป็นการ check ค่า start frame ,stop frame พอโปรแกรมเจอค่านี้ก็จะนำค่าระหว่างกลางนี้( ระหว่าง start frame ,stop frame ไปแสดงผล แล้วพอวนลูปมาเจอค่าต่อไป ซึ่งจะขึ้นต้นด้วย start frame ก็ให้เขียนโปรแกรมกำหนดเพื่อให้นำค่านี้ไปแสดงผลใน textbox ใหม่ตัวอย่างเช่นค่าที่รับเข้ามาจาก serialport ควรจะมี start frame เป็น 02 และ stop frame เป็น 03 ดังนี้
สมมติค่าที่รับเข้ามาเป็นเลขฐาน 10 ดังนี้6200 และค่าต่อไป คือ 6109
ดังนั้นถ้าแปลงข้อมูลเป็น byte จะได้
02 06 00 02 00 00 03 02 06 01 00 09 03โดย ในลูป while จะเป็น ก็จะเป็นการวนลูปค่าเหล่านี้แล้วในลูป while นี้ก็กำหนดเงื่อนไขขึ้นมาว่า ถ้าเจอ 02 ก็ให้นำข้อมูลที่อยู่ระหว่าง 02 และก่อน 03 ไปแสดงใน textbox พอเจอ 02 ใหม่ ( ข้อมูลถัดไป) ก็ให้ดึงข้อมูลที่อยู่ระหว่าง 02 และ 03 ไปแสดงใน textbox ทำขั้นตอนนี้ไปเรื่อยๆ ให้ครบข้อมูลที่รับเข้ามา
ส่วนตัวอักษรตัว m วิธี check ก็ให้ตรวจสอบก่อนว่าค่าเป็นเมื่อแปลงเป็น byte แล้วได้ค่าอะไร ที่คุณ itzone บอกว่า ตัดคำไม่ได้เนืองจากว่า ได้ใช้เมธอด ReadExisting() จะเป็นการรับค่าเข้ามาทั้งหมดที่ port ส่งมา ยังไงก็ตัดคำไม่ได้เพราะตำแหน่ง ในหน่วย ความจำ address ของแต่ละตัวอักษรจะไม่เหมือนกัน วิธีแก้ก็คือหาว่า m ในหน่วย byte คือเลขอะไร พอรู้แล้วว่าคือเลขอะไร ตัวอย่าง สมมติว่าเป็นเลข 109 เราก็ใช้ if ตรวจสอบเงื่อนไขว่าจะเจอ เลข 109 ก็ให้นำค่าที่ส่งมานี้ไปใช้งานต่อไป
[With great power comes great responsibility]