我的应用程序从串行端口(MyDataReader)读取每个x ms的一些数据并将其显示在控件上,MyDataReader也可以是一个文件,我可以从中读取数据。
我使用了一个简单的计时器,每个刻度我都从串口/文件中读取数据,处理并显示它,效果很好。
现在我添加了另一个我需要读取数据的设备,我已经切换到System.Threading.Timer,但现在我的“tick”功能无法正常工作,当它从串口读取时,我得到零。当我进入调试模式和断点ReadFromSerialPort()函数时,有时我得到有效数据,有时候我没有。
如果我将读取从serialport切换到从文件读取它可以正常工作,我调用了所有显示数据的控件。
我锁定了串口的读/写:
lock(this)
{
writetoserialport;
readfromserialport;
}
任何人都知道为什么我会一直得到零,而当我断点时我有时会有数据? 这就像它打开了不同线程上串口的读取,我需要等待读取数据。
谢谢。
答案 0 :(得分:1)
嗯,串口与文件不一样。
文件数据存储在磁盘上,如果文件没有被截断,您可以稍后再获取。 数据可能来自串口,可能无法捕获。
因此,您必须从串行端口捕获数据并将其存储在缓冲区中。 然后计时器将从缓冲区中获取数据。
如果这不是您的问题,请告诉我们更多信息。
答案 1 :(得分:0)
读取串口并不确定。在执行读取功能时,端口中可能没有数据。您是否在实际执行读取功能之前检查是否有要读取的数据?
如果放入断点,由于调试速度不同,您有时会看到数据。