2011-03-09 75 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