最近在写一个串口读数据的方法
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 方法一样
没有数据来的时候线程是休眠状态的 ?
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 方法一样
没有数据来的时候线程是休眠状态的 ?
private void selMonitor_DataReceived(object sender, SerialDataReceivedEventArgs e)
{for (int count = 0; count < selMonitor.BytesToRead; count++)
{}
}
线程间操作无效: 从不是创建控件“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数据需要处理的 我这里想先让它显示出来
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;
}