如果重复此邮件,将邮件添加到忽略列表

本文关键字:添加 忽略列表 如果 | 更新日期: 2023-09-27 18:06:29

也许有人可以提供最好的方法来忽略消息,如果这个消息是重复的,我应该用什么来忽略,将消息保存在列表中并迭代列表或将所有消息保存到文件中,最好的方法是什么?我正在使用以下代码从串行端口读取数据:

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

如果重复此邮件,将邮件添加到忽略列表

您可以使用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
            }
        }
    }
}