如何定期检查serialport以在c#中读取数据?

如何定期检查serialport以在c#中读取数据?,c#,serial-port,C#,Serial Port,我目前正在编写一个C#程序,需要通过串行端口读写数据。我本来打算使用.NET SerialPort类的DataReceived、Read等方法来实现这一点,但后来我看到了一篇文章,其中谈到了这些方法编写得非常糟糕,不应该使用,而是使用BaseStream属性。我发现,为了写入serialport,我可以这样做: byte[] buffer = { size }; await comPort.BaseStream.WriteAsync(buffer, 0, buffer.Length); 对于阅

我目前正在编写一个C#程序,需要通过串行端口读写数据。我本来打算使用.NET SerialPort类的DataReceived、Read等方法来实现这一点,但后来我看到了一篇文章,其中谈到了这些方法编写得非常糟糕,不应该使用,而是使用BaseStream属性。我发现,为了写入serialport,我可以这样做:

byte[] buffer = { size };
await comPort.BaseStream.WriteAsync(buffer, 0, buffer.Length);
对于阅读,我可以用这个:

 byte[] buffer = new byte[size];
 int read = 0;
 while (read < size)
     read += await comPort.BaseStream.ReadAsync(buffer, read, size-read);
byte[]buffer=新字节[size];
int read=0;
while(读取<大小)
read+=wait comPort.BaseStream.ReadAsync(缓冲区、读取、大小读取);
但是,我需要定期调用read函数来查看serialport是否收到了更多需要收集的数据,我不确定该如何做。创建一个每隔一段时间调用一个函数的计时器是否是一个好的解决方案(如果是,我应该多久调用一次?每500毫秒一次?)


此外,我找到了从我链接的帖子上的一些评论中读取数据的代码,我不确定的是
size
使用什么。我会使用
SerialPort.BytesToRead()
方法,但根据帖子,该方法也不好,所以我不确定还能用什么。。。另外,是否需要读/写超时?老实说,我不知道代码是否需要。如有任何建议,将不胜感激

请查看此解决方案,它将取决于连接到COM端口的设备的规格。如果规范(例如,500毫秒的间隔)足够,则DataReceived事件和读取方法可能没有问题。