如何在读取串口并将数据写入文件时使用C#.net Serial DataReceived Handler?

时间:2016-12-14 20:28:09

标签: c# .net multithreading asynchronous serial-port

我需要不断读取串口,并使用计时器将数据记录到文件中。数据快速传输,4800波特率,我需要记录最近读取的数据。我使用的是DataReceivedEventHandlerReadLine()方法。当发生计时器事件以写入文件时,下面的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;它读取和写入数据很好,但似乎有些线程没有完成,并且在发生计时器事件时仍在读取端口。

有没有人有更好的方法来实现这个目标?

0 个答案:

没有答案