我需要不断读取串口,并使用计时器将数据记录到文件中。数据快速传输,4800波特率,我需要记录最近读取的数据。我使用的是DataReceivedEventHandler
和ReadLine()
方法。当发生计时器事件以写入文件时,下面的bool okToReadPort
设置为false
。基本代码流程在
...
serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
...
//serial reader class
private void DataReceivedHandler(object sender,SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
if (okToReadPort)
{
try
{
string indata = sp.ReadLine();
Console.Write("NMEA Sentence read: " + indata);
NMEAMsg tempMsg = new NMEAMsg(indata);
int count = nmeaList.Count;
for (int i = 0; i < count; i++)
{
if (tempMsg.sentenceType == nmeaList[i].sentenceType)
{
nmeaList[i] = tempMsg;
}
}
}
else
//do nothing
...
//form class
...
timerEventOccurred(){
serialReader.okToReadPort = false;
writeDataToFile(serialReader.data);
}
我在尝试枚举数据列表时收到错误&#34;收集已修改;枚举操作可能无法执行&#34;它读取和写入数据很好,但似乎有些线程没有完成,并且在发生计时器事件时仍在读取端口。
有没有人有更好的方法来实现这个目标?