C SerialPort串列埠通訊資料異常

2021-10-01 04:35:04 字數 1902 閱讀 1739

本篇文章只適合剛開始學習c#.net,並使用串列埠通訊的同學借鑑。筆者也是在寫c#與arduino串列埠進行通訊的時候收到的資料異常,翻閱了其他csdn博主對串列埠通訊的建議,最好就是使用執行緒對接收的資料進行處理。廢話不多說,下面展示執行緒方法和原方法。

使用執行緒的方法

//定義

private

delegate

void

settextcallback

(string strvalue)

;private

settextcallback setcallback;

thread threadportdata;

serialport serialport1 =

newserialport()

;//視窗初始化

private

void

form1_load

(object sender,

eventargs e)

//新增串列埠專案 獲取計算機上有多少個串列埠

foreach

(string s in system.io.ports.serialport.

getportnames()

)}///

/// 開啟串列埠

///

///

///

private

void

b_openserialport_click

(object sender,

eventargs e)

}///

/// 接收資料執行緒

///

private

void

datarecive()

}///

/// 處理串列埠資料並顯示(這裡並沒有進行詳細的處理,可根據自己的需求來處理)

///

///

private

void

setvalue

(string strvalue)

筆者是用的winform來程式設計的,因此在使用串列埠的時候需要匯入一些類using system.threading;using system.io.ports;,在此過程中用到了委託事件,因為winform的視窗是用的乙個執行緒來實現的,不能在乙個執行緒裡面對視窗的控制項進行處理,委託事件就不受影響,接下來的是筆者利用委託事件來進行串列埠資料接收的

使用事件接收串列埠資料

private

void

form1_load

(object sender,

eventargs e)

//新增串列埠專案 獲取計算機上有多少個串列埠

foreach

(string s in system.io.ports.serialport.

getportnames()

) serialport1.datareceived +

=new

serialdatareceivedeventhandler

(serialport1_datareceived)

;//事件處理例項化

}///

/// 串列埠訊息接收

///

///

///

void

serialport1_datareceived

(object sender,

serialdatareceivedeventargs e)

在事件處理過程中,只要緩衝區有訊息,系統就會自動讀取,因此需要清除緩衝,在接收過程中資料接收不完整大概是因為緩衝區的資料還沒有讀取完整就被清理掉了,因此建議使用串列埠通訊還是用執行緒比較合適。

c SerialPort串列埠通訊

1 引入using集 using system.io.ports 2 定義全域性變數 serialport serialport new serialport 3 可以設定下拉列表 combobox 在窗體的load事件中讀取電腦上的com口 foreach string serial name i...

CSerialPort串列埠操作

最近要寫乙個串列埠程式,用mfc自帶com元件的效果很差 一次接收乙個緩衝區的資料,沒辦法像寫嵌入式程式那樣單位元組就能觸發中斷接收那樣 所以進行了一些研究,發現了乙個第三方串列埠類很強大,效果非常好。程式設計環境 vs2008 建立乙個基於對話方塊的mfc應用程式,我在這裡是serialportt...

基於MFC的串列埠類CSerialPort的使用

基於mfc的串列埠類cserialport的使用 1 在dlg.件中新增標頭檔案 include cserialport.h 2 在dlg.件中定義串列埠類 public cserialport m serialport 定義串列埠類3 在dlg.件中定義串列埠類的實現函式 afx msg long...