c#多串口多线程接收数据

来源:互联网 发布:主机名和域名的区别 编辑:程序博客网 时间:2024/05/22 17:39

因为前段时间需要用到串口接收数据,且使用的串口号不确定,需采用多线程的方式来实现接收。

创建线程:

Thread thread = null;            for (int i = 0; i < PortNum; i++)//根据选择的串口号数量创建对应数量的线程            {                thread = new Thread(Text_Run);                thread.Name = Convert.ToString(i);                thread.IsBackground = true;//将线程转为后台线程                thread.Start(comport[i]);//传入串口号            }
线程运行函数:

public static void Run(string serialName )        {            SerialPort sp1 = new SerialPort();            sp1.PortName = serialName;//设置串口名            sp1.BaudRate = 57600;       //波特率            sp1.DataBits = 8;       //数据位            sp1.StopBits = StopBits.One;//停止位            sp1.Parity = Parity.None; //校验位            sp1.DataReceived += new SerialDataReceivedEventHandler(sp1_DataReceived);//数据接收事件            sp1.DtrEnable = true;//准备就绪                 sp1.RtsEnable = true;            sp1.ReadTimeout = 1000;//设置数据读取超时为1秒            portcom.Add(sp1);//保存串口实例            if (sp1.IsOpen == true)//如果打开状态,则先关闭一下            {                sp1.Close();            }            sp1.Open();        }

数据接收处理函数:

 private static void sp1_DataReceived(object sender, SerialDataReceivedEventArgs e)        {            Thread.Sleep(50);            lock (ojb)            {                SerialPort sp = sender as SerialPort;//获取当前接收数据的串口                if (!sp.IsOpen)//安全措施                {                    return;                }                int len = sp.BytesToRead;//数据的长度                byte[] receivedData = new byte[len];                sp.Read(receivedData, 0, len);//读取数据            }        } 



原创粉丝点击