如果此消息重复,则将消息添加到忽略列表
Add message to ignore list if this message was repeated
也许有人可以提供最好的方法如何在重复这条消息时忽略消息,我应该使用什么来忽略,将消息保存在列表中并遍历列表或将所有消息保存到文件中,什么是最好的方法?我正在使用以下代码从串口读取数据:
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
}
}
}
}
也许有人可以提供最好的方法如何在重复这条消息时忽略消息,我应该使用什么来忽略,将消息保存在列表中并遍历列表或将所有消息保存到文件中,什么是最好的方法?我正在使用以下代码从串口读取数据:
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
}
}
}
}