代码之家  ›  专栏  ›  技术社区  ›  hx_9009

C#任务完成后从2个串行端口读取数据

  •  1
  • hx_9009  · 技术社区  · 7 年前

    我想在我把我的RFID卡放在der RFID阅读器上后读取最后一个GPS位置。

    “gpsPort”和“rfidPort”。我不知道如何以这种方式中断两个事件处理程序。你能解决这个问题吗?

    class Program
    {
        static void Main(string[] args)
        {
            SerialPort gpsPort = new SerialPort("COM5");
            gpsPort.BaudRate = 9600;
            gpsPort.Parity = Parity.None;
            gpsPort.StopBits = StopBits.One;
            gpsPort.DataBits = 8;
            gpsPort.Handshake = Handshake.None;
            gpsPort.RtsEnable = true;
            gpsPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
            gpsPort.Open();
    
            SerialPort rfidPort = new SerialPort("COM4");
            rfidPort.BaudRate = 9600;
            rfidPort.Parity = Parity.None;
            rfidPort.StopBits = StopBits.One;
            rfidPort.DataBits = 8;
            rfidPort.Handshake = Handshake.None;
            rfidPort.RtsEnable = true;
            rfidPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler2);
            rfidPort.Open();
            Console.ReadKey();            
        }
    
         public static void  DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {
    
            SerialPort sp = (SerialPort)sender;
    
            string indata = sp.ReadExisting();
    
            if (indata.Contains("GPRMC"))
            {
                string[] sentence = indata.Split(',');
    
                string latitude = sentence[3].Substring(0, 2) + "°";
                latitude = latitude + sentence[3].Substring(2);
                latitude = latitude + sentence[4];
    
                string longitude = sentence[5].Substring(2, 1) + "°";
                longitude = longitude + sentence[5].Substring(3);
                longitude = longitude + sentence[6];
    
                Console.Write("Latitude:" + latitude + Environment.NewLine + "Longitude:" + longitude + Environment.NewLine + Environment.NewLine);
            }            
        }
    
         public static void DataReceivedHandler2(object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;
            string indata = sp.ReadExisting();
    
            Console.Write(indata + Environment.NewLine);       
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Mong Zhu Bart de Boer    7 年前

    string indata 第一个DataReceived事件范围外的静态变量。

    class Program
    {
        private static string indata_GPS = "";
    ....
    }
    

    public static void  DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
    {
        SerialPort sp = (SerialPort)sender;
        indata_GPS = sp.ReadExisting();
    

    DataReceived 事件从RFID设备触发,您只需从中读取值 indata_GPS . 这样,您将获得GPS的最新值

    public static void DataReceivedHandler2(object sender, SerialDataReceivedEventArgs e)
    {
        SerialPort sp = (SerialPort)sender;
        string indata = sp.ReadExisting();
    
        Console.Write("RFID: " + indata + Environment.NewLine);
        Console.Write("GPS latest Data: " + indata_GPS  + Environment.NewLine);
    }
    

    我不知道如何中断两个事件处理程序