2011-03-09 78 views
1

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

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

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

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

我锁定从一个串口读/写:

lock(this) 
{ 
    writetoserialport; 
    readfromserialport; 
} 

任何人有任何想法,为什么我得到零的时候,当我断点我有时数据? 这就像它打开从不同线程上的串行端口读取,我需要等待要读取的数据。

谢谢。

+3

你能提供更多的代码吗? – Nick 2011-03-09 10:57:55

+0

而不是轮询,为什么不做串口上的异步读取。 – CheeZe5 2011-03-09 15:47:13

回答

1

好吧,一个串口不是一个文件。

文件数据存储在磁盘上,如果文件未被截断,您可以稍后获取。 数据可能来自串行端口,可能不会被捕获。

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

如果这不是你的问题,告诉我们更多。

+0

我的请求后,设备发送数据,我写一个请求,并immidietly我得到的数据,问题开始时,我开始使用System.Threading.Timer,当我使用普通的Timer它工作正常。 – GLev 2011-03-09 14:39:06

0

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

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

+0

我的请求后,设备发送数据,我写一个请求,并immidietly我得到的数据,问题开始时,我开始使用System.Threading.Timer,当我使用普通的定时器,它工作正常。 – GLev 2011-03-09 14:38:35