Добавить сообщение, чтобы игнорировать список, если это сообщение было повторено

Может быть, кто-то может предоставить лучший способ, как игнорировать сообщение, если это сообщение было повторено, что я должен использовать для игнорирования, сохранения сообщений в списке и итерации по списку или сохранения всех сообщений в файл, каков наилучший способ? Я читаю данные из последовательного порта, используя этот код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;

namespace canSniff
    {
    class PortDataReceived
    {
        public static void Main()
        {
            SerialPort mySerialPort = new SerialPort("COM4");

            mySerialPort.BaudRate = 115200;
            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();

        }

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

1 ответ

Вы могли бы использовать HashSet<string> хранить полученные сообщения. Если вы должны сохранить его в виде файла, зависит от того, как приложение используется. Код ниже знает, как долго приложение работает с полученными сообщениями.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;

namespace canSniff
    {
    class PortDataReceived
    {

        private HashSet<string> _messages = new HashSet<string>();

        public static void Main()
        {
            SerialPort mySerialPort = new SerialPort("COM4");

            mySerialPort.BaudRate = 115200;
            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();

        }

        private static void DataReceivedHandler(
                            object sender,
                            SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;
            string indata = sp.ReadExisting();

            if(_messages.Add(indata))
            {
                 // the message was added 
                 Console.WriteLine("Data Received:");
                 Console.Write(indata);
            }
            else
            {
                  // do something with the omitted message that was allready in the list
            }
        }
    }
}
Другие вопросы по тегам