问个串口数组的问题:
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)
         {
     }

解决方案 »

  1.   

    就你贴出来的代码,应该是可以触发事件的;应该是_ComMeter[0]一直未收到数据吧,先确认是否有数据发送过来;
      

  2.   

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

  3.   

    很奇怪的需求,串口在计算机系统中是做为一种流设备管理的,需要通过open和close来占用和释放。你定义了12个串口的数组也不可能同时open。由于你发布的代码中没有open部分,我怀疑你使用的那个_ComMeter[0]是由于占用冲突的问题open失败了。
      

  4.   

       
            //打开表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;
            }