社区
C#
帖子详情
SerialPort 的 readLine的时候不能继续往下执行
john_jia
2007-12-28 10:58:48
我在调试的时候SerialPort 的 readLine的时候不能继续往下执行。
在ReadLine的时候停止不动了。
这是为什么呢?
...全文
278
9
打赏
收藏
SerialPort 的 readLine的时候不能继续往下执行
我在调试的时候SerialPort 的 readLine的时候不能继续往下执行。 在ReadLine的时候停止不动了。 这是为什么呢?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ddwhome
2008-07-11
打赏
举报
回复
我的也一样,如果没有设置超时,程序就会锁死.而且我的DataReceived事件也不会执行.
Lvgdq
2007-12-28
打赏
举报
回复
恩,我正在调试...有问题一起讨论嘛,这方面我菜鸟...最近项目里用到才开始学的。
john_jia
2007-12-28
打赏
举报
回复
你超时的话。把超时时间设置长点
Lvgdq
2007-12-28
打赏
举报
回复
那我也不知道是怎么回事,要不楼主你这样初始化一下。
SerialPort serialPort1= new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
因为我看你的serialPort1里面奇偶效验位这些都没有设置
john_jia
2007-12-28
打赏
举报
回复
没任何提示。
Lvgdq
2007-12-28
打赏
举报
回复
恩,这个程序我也用过。也是在那里卡住的。不过我是抛出的超时异常,所以我估计我是因为串口数据没传过来的原因。如果你是两台机子连上串口进行数据传输的话,我就不知道为什么了...
另外,卡住了程序应该会有提示报错这些吧?
john_jia
2007-12-28
打赏
举报
回复
没提示超时。就是停着不动了。
我目前测试的是字符串的传输。
发送端:
serialPort1.PortName = "COM1";
serialPort1.BaudRate = 9600;
serialPort1.Open();
byte[] data = Encoding.Unicode.GetBytes(textBox1.Text);
string str = Convert.ToBase64String(data);
serialPort1.WriteLine(str);
serialPort1.WriteLine("");
MessageBox.Show("数据发送成功!", "系统提示");
serialPort1.Close();
接收端:
private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(S));
t.Start();
}
private void S()
{
try
{
serialPort1.PortName = "COM1";
serialPort1.BaudRate = 9600;
serialPort1.Open();
byte[] data = Convert.FromBase64String(serialPort1.ReadLine());
textBox1.Text = Encoding.Unicode.GetString(data);
serialPort1.Close();
MessageBox.Show("数据接收成功!", "系统提示");
}
catch (Exception exx)
{
MessageBox.Show(exx.Message);
}
}
但是到readline的时候就没反应了。
Lvgdq
2007-12-28
打赏
举报
回复
是不是提示超时异常?
LZ你读什么样的串口信息?我也遇到了这个问题还没解决...
john_jia
2007-12-28
打赏
举报
回复
不知道为什么我的DataReceived没执行
C#--
Se
ria
l
Port
1、DiscardOutBuffer和DiscardInBuffer 1)用途:
Se
ria
l
Port
.DiscardOutBuffer方法清除串行驱动程序发送缓冲区的数据;
Se
ria
l
Port
.DiscardInBuffer方法清除串行驱动程序的接收缓冲区的数据; 2)用法: 当你的程序在窗口发送一帧数据(所谓一帧是指由...
从MSComm到
Se
ria
l
Port
:.NET串口编程实战与迁移指南
串口通信作为设备间基础且可靠的数据交换方式,其核心原理在于通过串行接口按位传输数据,广泛应用于工业自动化、嵌入式调试等场景。在.NET开发中,System.IO.
Port
s.
Se
ria
l
Port
类提供了原生、高效的串口操作能力,它采用事件驱动的异步模型,相比传统的MSComm控件,在资源管理、线程安全和跨平台兼容性上更具优势。通过合理设置波特率、数据位等参数,并处理DataReceived事件中的跨线程UI更新,开发者可以构建稳定的数据采集与控制应用。本文聚焦于工业自动化场景,详细解析如何从MSComm平滑
ReadLine
改为ReadAll方法
/ 头+长度+数据+CRC。qDebug() << "完整帧数据:" << frame.toHex(' ').toUpper();while (m_buffer.size() >= 5) { // 至少包含帧头+长度字段。// 示例协议:帧头0x01 + 数据长度(2字节) + 数据 + CRC(2字节)
Unity蓝牙手柄串口通信:
Se
ria
l
Port
避坑与实战解决方案
串口通信是硬件交互的经典方式,通过定义波特率、数据位等参数实现设备间数据交换。其原理基于稳定的字节流传输,在工业控制、嵌入式开发中广泛应用。然而,当这一技术应用于无线蓝牙环境时,尤其是通过虚拟COM端口连接蓝牙手柄,其固有的稳定性假设面临挑战。蓝牙协议栈的动态连接特性、系统权限管理以及Unity引擎的特殊运行环境,使得直接使用C#的
Se
ria
l
Port
类极易引发权限异常、数据乱码或连接超时等问题。本文聚焦Unity开发中蓝牙手柄的串口通信实践,深入剖析
Se
ria
l
Port
在无线场景下的适配难点,并提供从端口
Node.js 串口通讯 node-
se
ria
l
port
使用说明
安装:npm install
se
ria
l
port
使用: var
Se
ria
l
Port
= require('
se
ria
l
port
'); var
port
= new
Se
ria
l
Port
('COM5');
port
.on('open', function() {
port
.write('main screen turn on', function(err) { if (err) ...
C#
111,128
社区成员
642,536
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章