两种方法可以实现:
1.定义一个静态SerialPort1对象,初始化串口参数,不要用自带的SerialPort控件;
2.把串口定义为一个类,其他窗体就可以直接调用。
第一种方法实现如下:
1.1 定义一个静态SerialPort1对象
public static SerialPort SerialPort1 = new SerialPort();
1.2 初始化串口参数,注册串口接收事件
public static byte[] readData = new byte[100];
//打开串口,初始化参数,注册serialPort1_DataReceived事件
private void btnOpenPort_Click(object sender, EventArgs e)
{
if (txtInputAddr.Text == "")
{
MessageBox.Show("请输入地址");
return;
}
try
{
if (SerialPort1.IsOpen == false)
{
SerialPort1.PortName = port_cbb.Text;
SerialPort1.BaudRate = Convert.ToInt32(baud_cbb.Text);
SerialPort1.ReceivedBytesThreshold = 1;
SerialPort1.DataBits = 8;
SerialPort1.Parity = System.IO.Ports.Parity.None;
SerialPort1.StopBits = System.IO.Ports.StopBits.One;
SerialPort1.Open();
isOpen = true;
SerialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
open_btn.Text = "关闭串口";
}
else
{
SerialPort1.Close();
isOpen = false;
open_btn.Text = "打开串口";
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString() + SerialPort1.PortName.ToString());
}
}
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Thread.Sleep(50);
byte[] dataTemp = new byte[SerialPort1.BytesToRead];
SerialPort1.Read(dataTemp, 0, dataTemp.Length);
readData = dataTemp;
}
1.3 其他窗体调用
//串口发送
MainForm.SerialPort1.Write(sendReadFaultCmd, 0, sendReadFaultCmd.Length);
//串口接收,可直接通过主窗体类名调用
MainForm.readData.Length
MainForm.readData[0]