System.Threading.Timer和SerialPort Read

时间:2011-03-09 10:54:37

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

我的应用程序从串行端口(MyDataReader)读取每个x ms的一些数据并将其显示在控件上,MyDataReader也可以是一个文件,我可以从中读取数据。

我使用了一个简单的计时器,每个刻度我都从串口/文件中读取数据,处理并显示它,效果很好。

现在我添加了另一个我需要读取数据的设备,我已经切换到System.Threading.Timer,但现在我的“tick”功能无法正常工作,当它从串口读取时,我得到零。当我进入调试模式和断点ReadFromSerialPort()函数时,有时我得到有效数据,有时候我没有。

如果我将读取从serialport切换到从文件读取它可以正常工作,我调用了所有显示数据的控件。

我锁定了串口的读/写:

lock(this)
{
    writetoserialport;
    readfromserialport;
}

任何人都知道为什么我会一直得到零,而当我断点时我有时会有数据? 这就像它打开了不同线程上串口的读取,我需要等待读取数据。

谢谢。

2 个答案:

答案 0 :(得分:1)

嗯,串口与文件不一样。

文件数据存储在磁盘上,如果文件没有被截断,您可以稍后再获取。 数据可能来自串口,可能无法捕获。

因此,您必须从串行端口捕获数据并将其存储在缓冲区中。 然后计时器将从缓冲区中获取数据。

如果这不是您的问题,请告诉我们更多信息。

答案 1 :(得分:0)

读取串口并不确定。在执行读取功能时,端口中可能没有数据。您是否在实际执行读取功能之前检查是否有要读取的数据?

如果放入断点,由于调试速度不同,您有时会看到数据。