看板 C_Sharp 關於我們 聯絡資訊
網路上找了很多資料, 都是寫入的比較多, 讀取的比較少. 寫入的比較簡單, 先加一個 using System.IO.Ports; 然後後面要列出所有電腦上的com port this.comboBox1.Items.AddRange(System.IO.Ports.SerialPort.GetPortNames()); 這樣一個指令就可以打發, 然後設定一個serialport port, SerialPort port = new SerialPort( "COM1", 9600, Parity.None, 8, StopBits.One); 用port.write(string) 這樣就可以寫入, 若是要寫入byte, port.Write(new byte[] { 0x31, 0xE2, 0xFF }, 0, 3); 這樣就可以. 但是要讀取的話,比較困難.. 這也是我這篇問題比較主要的地方. 我原本想說也利用 serialport port_open 這樣一個指令,去開啟serialport (PS:讀取的port和上面寫入的port不同 因為打算做兩件不同的事情. 一個是寫入裝置,另一個是從無線裝置讀取剛剛寫入的資料,並確認是否正確) 因為讀取的資料還不確定是byte coding (HEX)或是ASCII coding. 所以這邊還不敢肯定要用readbyte還是readline比較適合 這邊就暫時略過不談, 但是read的問題滿大的. 我是應該用timer去定時抓取資料呢, 還是該用thread搭配while去一直撈資料呢.. 有沒有人可以給一點意見? 這個邏輯沒什麼問題, 可是我想要讓撈完資料之後能跳出個視窗定住, 讓使用者確認剛剛撈到的資料和寫入資料是同樣的內容. 這讓我苦惱了很久, 該用什麼方法比較直覺... 另外,com port建立連線的時候. 是不是可以在同樣的com port讀取和寫入? 有沒有可以參考的內容? 找了MSDN和codeproject都沒有比較好的說明. 下面附上port_open.read while和timer不同的想法 -- timer() { if (port_open.Bytestoread!=0) { textBox2.Text += Convert.ToString(port_op.ReadByte(), 16).ToUpper().PadLeft(2, '0'); //PS:這是read byte並補齊0的作法.. } else { label.text="nothing read"; } } while(port_open.Bytestoread!=0) { textBox2.Text += Convert.ToString(port_op.ReadByte(), 16).ToUpper().PadLeft(2, '0'); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.169.229.97
takashi737:在DataReceiver裡用一個Buffer(string) 來暫存資料 01/25 16:45
takashi737:用一個執行緒While迴圈判斷buffer是否出現結尾字元 01/25 16:46