我怎样才能得到哪个 "SerialPort" 触发了给定的 "DataReceived" 事件?

how can I get, which "SerialPort" has triggered the given "DataReceived" event?

我需要同时读取多个串口

我知道我应该使用多线程,但我不知道我应该怎么做。

我可以使用“SerialDataReceivedEventArgs”处理事件,将“.DataReceived”事件分配给 SerialPort 对象。

但是当它被触发时我看不到哪个端口触发了事件。所以我不知道应该读取哪些端口。

我试图将它放入一个新线程中,为线程分配特定的不同名称,但是当我使用它时:

private void CheckSerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        MessageBox.Show(Thread.CurrentThread.Name);
        //this code runs on another thread. It is not running on the thread where the SerialPort was opened.

    }

如果我尝试这个,同样的事情发生了:

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        Invoke(new EventHandler(DisplayThreadText));
    }
private void DisplayThreadText(object sender, EventArgs e)
    {
        //this code runs on the main thread. It is not running on the thread where the SerialPort was opened.
    }

所以我的问题是我怎样才能得到哪个端口触发了给定的事件?

或者我应该使用其他方法?我不知道...

但如果你能帮助我,我将不胜感激。

Sender 对象是 SerialPort。

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.RtsEnable = true;

        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);
    }