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