[转][SerialPort]测试用例
private void Form1_Load(object sender, EventArgs e) { var s = SerialPort.GetPortNames().OrderBy(r => r); foreach (var item in s) { comCOM.Items.Add(item); } if (comCOM.Items.Count > 0) comCOM.SelectedIndex = 0; var rates = new object[] { 9600, 12800, 14400, 19200, 1200, 2400, 4800 }; comBaudRate.Items.AddRange(rates); comBaudRate.SelectedIndex = 0; txtDataBits.Text = "8"; var paritys = Enum.GetNames(typeof(Parity)); comParity.Items.AddRange(paritys); comParity.SelectedIndex = 0; var stops = Enum.GetNames(typeof(StopBits)); comStopBits.Items.AddRange(stops); comStopBits.SelectedIndex = 1; } private void btnOpen_Click(object sender, EventArgs e) { ClostCom(); toolInfo.Text = string.Empty; try { serialPort1.PortName = comCOM.Text; serialPort1.BaudRate = Math.Max(2400, ConvertHelper.ToInt(comBaudRate.Text)); serialPort1.DataBits = Math.Max(1, ConvertHelper.ToInt(txtDataBits.Text)); serialPort1.Parity = (Parity)Enum.Parse(typeof(Parity), comParity.Text); serialPort1.StopBits = (StopBits)Enum.Parse(typeof(StopBits), comStopBits.Text); serialPort1.Open(); toolComState.BackColor = Color.Green; txtInfo.Text = DateTime.Now.ToString("HH:mm") + " 打开串口成功!\r\n"; } catch (Exception ex) { toolInfo.Text = "打开串口失败!"; txtInfo.Text = DateTime.Now.ToString("HH:mm") + " 打开串口失败:" + ex.Message + "\r\n"; } } private void ClostCom() { try { serialPort1.Close(); toolComState.BackColor = SystemColors.Control; } catch { } } private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { Thread.Sleep(50); byte[] buffer = new byte[serialPort1.ReadBufferSize]; int len = serialPort1.Read(buffer, 0, buffer.Length); Invoke((MethodInvoker)delegate { toolInfo.Text = string.Empty; if (txtInfo.Lines.Length > 5000) txtInfo.Text = string.Format("{0} {1} 接收到:{2}", DateTime.Now.ToString("HH:mm"), serialPort1.PortName, GetByte(buffer, len)); else { var s = txtInfo.Text; txtInfo.Text = string.Format("{0} {1} 接收到:{2}\r\n{3}", DateTime.Now.ToString("HH:mm"), serialPort1.PortName, GetByte(buffer, len), s); } }); } private string GetByte(byte[] buffer, int len) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < len; i++) { var item = buffer[i]; sb.Append(item.ToString("x2") + " "); } sb.AppendLine(); sb.Append(Encoding.Default.GetString(buffer)); sb.AppendLine(); return sb.ToString(); }
有个 BUG:文本框始终只有一行内容。
虚拟串口工具下载:下载地址
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2018-04-10 [转][Sql]DBA 常用语句
2018-04-10 [转][MVC]更新 dll 后版本不匹配的问题
2015-04-10 VBA 对比两行数据