您需要将 EventHandler 附加到DataReceived Event。
从上面的链接:
表示将处理 SerialPort 对象的数据接收事件的方法
private static void DataReceivedHandler( object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Console.WriteLine("Data Received:");
Console.Write(indata);
}
您可以将其附加在您的设计器中或像这样以编程方式。
serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
每次单击按钮时,您都会附加 DataReceivedEvent 处理程序,此外,正如 Greg 提到的,您将在发送数据后立即关闭端口。看看这样的事情是否有效。不过,我没有任何串行设备可以对此进行测试。我通常会在您的会话开始时打开端口并保持打开状态,直到您完成所有通信。
public partial class Form1 : Form
{
SerialPort serialPort = new SerialPort();
public Form1()
{
InitializeComponent();
serialPort.PortName = "Com1";
serialPort.BaudRate = 115200;
serialPort.DataReceived += new SerialDataReceivedEventHandler(DataRecievedHandler);
openSerial();
}
void DataRecievedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
MessageBox.Show(indata);
closeSerial();
}
public void openSerial()
{
if (!serialPort.IsOpen) serialPort.Open();
}
public void closeSerial()
{
if (serialPort.IsOpen) serialPort.Close();
}
private void button1_Click(object sender, EventArgs e)
{
openSerial();
serialPort.Write("Hello");
}
}