c#读取串口数据

fangshaoshen 2010-10-03 03:13:04
最近在写一个串口读数据的方法


SerialPort sp= new SerialPort();

这是一个实时数据接收程序。
我需要监听串口,一有数据马上做出处理
现在我是写了一个死循环

while(true)
{
int PortLength = sp.BytesToRead;

if (PortLength != 0)
{
byte[] PortDatas = new byte[PortLength];

for (int i = 0; i < PortLength; i++)
{
PortDatas[i] = (byte)sp.ReadByte();
}
}
}


这样做也能实现功能, 只是这个循环一直在执行。

有没有这样一个方法 就像 Socket 下的 Receive 方法一样
没有数据来的时候线程是休眠状态的 ?
...全文
863 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
LMH1472558 2010-10-06
  • 打赏
  • 举报
回复
学习中,来学习一下
xiaotiange 2010-10-06
  • 打赏
  • 举报
回复
把读取到的数据放到一个预先定义的较大容量的字节数组里,分段读取
loveSoftandhxy 2010-10-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fangshaoshen 的回复:]
感谢1楼的回复 问题解决了 不过在这个事件中 对FORM 中控件的调用 会出错
线程间操作无效: 从不是创建控件“richTextBox1”的线程访问它

我想把得到的数据写到 richTextBox1 中 该怎么做呢?


C# code

private void selMonitor_DataReceived(object sender, SerialDataR……
[/Quote]


加委托
gaara777 2010-10-06
  • 打赏
  • 举报
回复
顶,,学习中。。。。
ckp00001 2010-10-04
  • 打赏
  • 举报
回复
改成这样吧:
        delegate void SendMessageDelegate(string message); 

private void selMonitor_DataReceived(object sender, SerialDataReceivedEventArgs e)
{

int count = 0;
count = sp.BytesToRead;
byte[] dates = new byte[count];
string ss = "";
for (int i = 0; i < count; i++)
{
dates[i] = (byte)sp.ReadByte();
ss += dates[i];
}

this.Invoke(new SendMessageDelegate(SendMessage), new object[] { ss });

}
void SendMessage(string m)
{
this.richTextBox1.Text += m;
}
fangshaoshen 2010-10-03
  • 打赏
  • 举报
回复
CheckForIllegalCrossThreadCalls=false; 的话 程序会不稳定 时不时出现一些很奇怪的错误, 比如收取到的是不完整的数据 等等。。
fangshaoshen 2010-10-03
  • 打赏
  • 举报
回复
感谢1楼的回复 问题解决了 不过在这个事件中 对FORM 中控件的调用 会出错
线程间操作无效: 从不是创建控件“richTextBox1”的线程访问它

我想把得到的数据写到 richTextBox1 中 该怎么做呢?


private void selMonitor_DataReceived(object sender, SerialDataReceivedEventArgs e)
{

int count = 0;
count = sp.BytesToRead;
byte[] dates = new byte[count];
string ss = "";
for (int i = 0; i < count; i++)
{
dates[i] = (byte)sp.ReadByte();
ss += dates[i];
}
this.richTextBox1.Text = ss;
}

上面这个方法只是一个测试方法 得到的 byte数据需要处理的 我这里想先让它显示出来
wuyq11 2010-10-03
  • 打赏
  • 举报
回复
串口是自动监听数据的,发送一次,接收写在DataReceived事件里
private void selMonitor_DataReceived(object sender, SerialDataReceivedEventArgs e)
{for (int count = 0; count < selMonitor.BytesToRead; count++)
{}
}

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧