c# 多个SerialPort 同时接收数据
想通过多个线程打开多个SerialPort 使得每个SerialPort 同时接收数据。for (int i = 0; i < 9; i++)
{
if (Opera[i])
{
mYRun[i] = new Thread(ReadDevice1);
mYRun[i].Start(comPort[i].PortName);
}//启动线程
}
private void ReadDevice1(object Num)
{
////向串口写入数据
comPort[i].DiscardInBuffer();
comPort[i].DiscardOutBuffer();
comPort[i].Write(sendData, 0, sendData.Length);
comPort[i].DataReceived += new SerialDataReceivedEventHandler(DataReceived)
//串口接收数据
现在是开一个串口能正常接收数据,但是开两个串口就无法正常接收数据,这是为什么呢?
难道不能用SerialPort 的DataReceived 事件接收多线程串口的数据?应该怎么写?
} --------------------编程问答-------------------- DataReceived事件会自动创建线程 --------------------编程问答-------------------- 每个串口收到数据后都写到同一个东东里面。然后再处理 --------------------编程问答-------------------- 每个串口的处理函数绑定不同的委托函数试试
comPort[1].DataReceived += new SerialDataReceivedEventHandler(DataReceived1)
comPort[2].DataReceived += new SerialDataReceivedEventHandler(DataReceived2)
.....
--------------------编程问答-------------------- DataReceived 方法内部应区别开不同的串口,并使用不同的变量保存数据。
void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)--------------------编程问答--------------------
{
SerialPort sp = sender as SerialPort;
int len = sp.BytesToRead;
byte[] buff = new byte[len];
sp.Read(buff, 0, len);
}
void DataReceived(object o, SerialDataReceivedEventArgs e)
{
byte[] b = new byte[comPort[int100].BytesToRead];//定义byte数组,serialPort读取数据
comPort[int100].Read(b, 0, b.Length);
str = "";
if (b.Length > 0)
{
for (int i = 0; i < b.Length; i++)
{
str += string.Format("{0:X2} ", b[i]);
}
richTextBox1.Invoke
(
new MethodInvoker
(
delegate
{
Application.DoEvents();
richTextBox1.AppendText( DateTime.Now + ": " + str + "\n");
}
)
);
这样写是不是导致显示在 richTextBox1 错误? --------------------编程问答-------------------- 在richTextBox1 中显示收到的数据,16进制方式 --------------------编程问答-------------------- 问题是开一个串口能正常显示 读取,接收。开两个及以上就显示错误 --------------------编程问答-------------------- --------------------编程问答--------------------
这么多人回答你了
比如3楼让你每个串口对应一个事件处理方法
4楼虽然让你多串口共用一个事件处理方法,但内部必须区分串口
象你这个例子,建议用4楼的做法
另外既然用了DataReceived事件,就没必要用线程,它会自动启线程;反之,如果用线程,就不用DataReceived事件 --------------------编程问答-------------------- 除
补充:.NET技术 , C#