C# CSharp SerialPort串列埠工具類
阿新 • • 發佈:2019-01-06
這幾天要做產線的一個治具,需要用到串列埠,這裡就研究了下。
挺簡單的,都是靜態函式,直接呼叫即可
這個類能夠實現串列埠的同步讀和非同步讀方法
不要放在UI執行緒,會導致阻塞的。可以使用backgroundworker
需要using System.IO.Ports;
public class SerialPortHelp { //測試串列埠狀態 public static bool Test(SerialPort serialport) { try { serialport.Open(); serialport.Close(); return true; } catch (Exception) { return false; } } //函式會直接傳送一串字串 static public bool Send(string data,SerialPort serialport) { try { serialport.Write(data); return true; } catch (Exception) { return false; } } //傳送二進位制 static public bool SendBinary(byte[] data, SerialPort serialport) { try { serialport.Write(data, 0, data.Length); return true; } catch (Exception) { return false; } } //同步讀 直到超時 static public string SynRead(int TimeoutMs, SerialPort serialport) { string data; serialport.ReadTimeout = TimeoutMs; try { //阻塞到讀取資料或超時 byte firstByte = Convert.ToByte(serialport.ReadByte()); int bytesRead = serialport.BytesToRead; byte[] bytesData = new byte[bytesRead + 1]; bytesData[0] = firstByte; for (int i = 1; i <= bytesRead; i++) bytesData[i] = Convert.ToByte(serialport.ReadByte()); data = System.Text.Encoding.Default.GetString(bytesData); return data; } catch (Exception) { return string.Empty; //處理超時錯誤 } } //非同步讀 static public string AsyRead(int waitTimeMs, SerialPort serialport) { string data; System.Threading.Thread.Sleep(waitTimeMs); try { data = serialport.ReadExisting(); return data; } catch (Exception) { return string.Empty; //處理錯誤 } } }