串口数组接收事件处理难题

xiaomingauk 2012-08-08 03:42:12
问个串口数组的问题:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.IO.Ports;
using System.Threading;

namespace Meter
{
public partial class FrmMeter : Form
{

//动态建立串口
SerialPort _Com_Banlance=new SerialPort();
SerialPort[] _ComMeter=new SerialPort[12];
我定义了两组串口,一个是数组,其中上边这个可以触发接收事件,而数组的不能触发,请问大侠,为什么呢?
下面是定义接收事件:
public FrmMeter()
{
InitializeComponent();

_Com_Banlance.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(OnDataReceived_Balance);

for (int i = 0; i < 12;i++ )
{
_ComMeter[i] = new SerialPort();
}
_ComMeter[0].DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(OnDataReceived_M1);


}
这个可以触发:
private void OnDataReceived_Balance(object sender, SerialDataReceivedEventArgs e)
{
}
这个不可以触发:
private void OnDataReceived_M1(object sender, SerialDataReceivedEventArgs e)
{
}
...全文
78 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaomingauk 2012-08-14
  • 打赏
  • 举报
回复
另外我的系统里有13个串口,是可以同时打开的
xiaomingauk 2012-08-14
  • 打赏
  • 举报
回复
运行时显示端口已经打开,我不用数组这样定义就可以接受和发送数据的。
xiaomingauk 2012-08-14
  • 打赏
  • 举报
回复

//打开表1-12端口,返回成功打开的端口数
private int openCom_Meter()
{
int openCount = 0;

//-------------------

//sp1.PortName = "COM2";
//sp1.BaudRate=2400;
//sp1.Parity = Parity.Even;
//sp1.DataBits = 8;
//sp1.StopBits = StopBits.One;
//com_m1.Encoding = Encoding.BigEndianUnicode;
//-----------------------
//sp1.Open();
for (int i = 0; i < 12; i++)
{
try
{

_ComMeter[i] = new SerialPort();
_ComMeter[i].BaudRate = 2400;
_ComMeter[i].PortName = _PortName[i];
_ComMeter[i].Parity = Parity.Even;
_ComMeter[i].DataBits = 8 ;
_ComMeter[i].StopBits = StopBits.One;
// _ComMeter[i].ReceivedBytesThreshold = 2;
if (_ComMeter[i].IsOpen)
{
_ComMeter[i].Close();
}
_ComMeter[i].Open();//打开串口
openCount+=1;
txtLog.AppendText(DateTime.Now + "成功打开" + _PortName[i] + "端口!" + "\r\n");
}
catch
{
txtLog.AppendText(DateTime.Now +"打开"+_PortName[i]+"端口时错误!"+"\r\n");
continue;
}

}

return openCount;
}
xiaobn_cn 2012-08-14
  • 打赏
  • 举报
回复
很奇怪的需求,串口在计算机系统中是做为一种流设备管理的,需要通过open和close来占用和释放。你定义了12个串口的数组也不可能同时open。由于你发布的代码中没有open部分,我怀疑你使用的那个_ComMeter[0]是由于占用冲突的问题open失败了。
SocketUpEx 2012-08-14
  • 打赏
  • 举报
回复
for (int i = 0; i < 12;i++ )
{
_ComMeter[i] = new SerialPort();
_ComMeter[i].DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(OnDataReceived_M1);
}
xiaomingauk 2012-08-14
  • 打赏
  • 举报
回复
数据是有发送过来了,问题就是如果不用数组就可以触发接收事件,用了数组就不行。
owennol 2012-08-10
  • 打赏
  • 举报
回复
就你贴出来的代码,应该是可以触发事件的;

应该是_ComMeter[0]一直未收到数据吧,先确认是否有数据发送过来;
xiaomingauk 2012-08-10
  • 打赏
  • 举报
回复
自己顶,呵呵呵

110,535

社区成员

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

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

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