C#編寫一個控制臺程序的實現(xiàn)串口通信示例
更新時間:2025年07月01日 10:48:12 作者:iCxhust
本文主要介紹了C#編寫一個控制臺程序的實現(xiàn)示例,實現(xiàn)串口通信功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
1.用C#編寫一個控制臺程序,列出計算機上可用的串口,并能夠選擇要用的串口,波特率配置成9600,8,N,1,能夠進行接受和發(fā)送字符串。
2.添加依賴項
3.程序
using System; using System.IO.Ports; using System.Text; using System.Threading; namespace SerialPortTerminal { class Program { private static SerialPort _serialPort; private static bool _continue = true; static void Main(string[] args) { Console.Title = "串口通信終端"; Console.OutputEncoding = Encoding.UTF8; Console.InputEncoding = Encoding.UTF8; try { // 列出可用串口 Console.WriteLine("可用的串口列表:"); string[] ports = SerialPort.GetPortNames(); if (ports.Length == 0) { Console.WriteLine("未找到可用串口。按任意鍵退出..."); Console.ReadKey(); return; } for (int i = 0; i < ports.Length; i++) { Console.WriteLine($"{i + 1}. {ports[i]}"); } // 選擇串口 int selectedIndex = -1; while (selectedIndex < 0 || selectedIndex >= ports.Length) { Console.Write($"\n請選擇串口 (1-{ports.Length}): "); if (int.TryParse(Console.ReadLine(), out int input) && input > 0 && input <= ports.Length) { selectedIndex = input - 1; } else { Console.WriteLine("無效的選擇,請重新輸入。"); } } string selectedPort = ports[selectedIndex]; Console.WriteLine($"已選擇: {selectedPort}"); // 創(chuàng)建并配置串口 _serialPort = new SerialPort(selectedPort) { BaudRate = 9600, Parity = Parity.None, DataBits = 8, StopBits = StopBits.One, Handshake = Handshake.None, ReadTimeout = 500, WriteTimeout = 500, Encoding = Encoding.UTF8 }; // 設置數(shù)據(jù)接收事件處理 _serialPort.DataReceived += SerialPortDataReceived; // 打開串口 _serialPort.Open(); Console.WriteLine("串口已打開,配置: 9600,8,N,1"); Console.WriteLine("輸入要發(fā)送的文本 (輸入 'exit' 退出):"); Console.WriteLine("---------------------------------"); // 啟動發(fā)送線程 Thread writeThread = new Thread(Write); writeThread.IsBackground = true; writeThread.Start(); // 等待退出 while (_continue) { Thread.Sleep(100); } // 關閉串口 if (_serialPort.IsOpen) { _serialPort.Close(); } Console.WriteLine("串口已關閉。"); } catch (Exception ex) { Console.WriteLine($"錯誤: {ex.Message}"); Console.WriteLine("按任意鍵退出..."); Console.ReadKey(); } } private static void SerialPortDataReceived(object sender, SerialDataReceivedEventArgs e) { try { SerialPort sp = (SerialPort)sender; string data = sp.ReadExisting(); if (!string.IsNullOrEmpty(data)) { Console.Write($"[接收] {data}"); } } catch (Exception ex) { Console.WriteLine($"接收錯誤: {ex.Message}"); } } private static void Write() { while (_continue) { try { string message = Console.ReadLine(); if (message?.ToLower() == "exit") { _continue = false; return; } if (_serialPort != null && _serialPort.IsOpen) { _serialPort.WriteLine(message); Console.WriteLine($"[發(fā)送] {message}"); } } catch (Exception ex) { Console.WriteLine($"發(fā)送錯誤: {ex.Message}"); } } } } }
4.結果
到此這篇關于C#編寫一個控制臺程序的實現(xiàn)示例的文章就介紹到這了,更多相關C#編寫控制臺程序內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:
相關文章
C#使用Jquery zTree實現(xiàn)樹狀結構顯示 異步數(shù)據(jù)加載
這篇文章主要為大家詳細介紹了C#使用Jquery zTree實現(xiàn)樹狀結構顯示和異步數(shù)據(jù)加載,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12