c#串口侦听器

par*_*man 0 c# serial-port

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

while true
    if someDataOnSerialPort
        callmyfunction(serialPortData)
Run Code Online (Sandbox Code Playgroud)

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

Sco*_*ain 10

是的,使用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)
    {
        //....
    }
}
Run Code Online (Sandbox Code Playgroud)