C#串口监听器

c# serial port listener

在C#中是否有任何串口侦听器,如果串口上有任何数据,它会调用我的函数吗? 我唯一的想法是使用无限循环,像这样:

while true
    if someDataOnSerialPort
        callmyfunction(serialPortData)

? 如果有任何数据,任何处理程序都会调用我的函数? 谢谢

是的,可以使用 DataReceived 事件来通知新数据并从该事件处理程序内部而不是无限循环中调用您的函数。

这是来自 MSDN 的示例,稍作修改以使用您的函数名称

using System;
using System.IO.Ports;

class PortDataReceived
{
    public static void Main()
    {
        SerialPort mySerialPort = new SerialPort("COM1");

        mySerialPort.BaudRate = 9600;
        mySerialPort.Parity = Parity.None;
        mySerialPort.StopBits = StopBits.One;
        mySerialPort.DataBits = 8;
        mySerialPort.Handshake = Handshake.None;

        mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

        mySerialPort.Open();

        Console.WriteLine("Press any key to continue...");
        Console.WriteLine();
        Console.ReadKey();
        mySerialPort.Close();
    }

    private static void DataReceivedHandler(
                        object sender,
                        SerialDataReceivedEventArgs e)
    {
        SerialPort sp = (SerialPort)sender;
        string indata = sp.ReadExisting();
        //Console.WriteLine("Data Received:");
        //Console.Write(indata);

        callmyfunction(indata);
    }

    private static void callmyfunction(string data)
    {
        //....
    }
}