簡體   English   中英

System.Threading.Timer和SerialPort讀取

[英]System.Threading.Timer and SerialPort Read

我的應用程序每隔x毫秒從一個串行端口(MyDataReader)讀取一些數據並將其顯示在控件上,MyDataReader也可以是一個文件,我可以從中讀取數據。

我使用了一個簡單的計時器,每次滴答時,我都從串行端口/文件中讀取了數據,對其進行了處理並顯示出來,效果很好。

現在,我添加了另一個需要從中讀取數據的設備,並切換到System.Threading.Timer,但是現在我的“滴答”功能無法正常工作,當它從串行端口讀取時,我得到零。 當我進入調試模式並使用斷點ReadFromSerialPort()函數時,有時會獲得有效數據,有時卻沒有。

如果將讀取從串行端口切換為從文件讀取,則可以正常工作,我已經調用了所有顯示數據的控件。

我鎖定了從串行端口的讀/寫:

lock(this)
{
    writetoserialport;
    readfromserialport;
}

有人知道為什么我一直都為零,而當我斷點時,我有時會有數據嗎? 就像它打開了另一個線程上的從串行端口讀取的數據一樣,我需要等待數據被讀取。

謝謝。

好吧,串行端口與文件不同。

文件數據存儲在磁盤上,如果文件沒有被截斷,則可以稍后獲取。 數據可以來自串行端口,並且可能無法捕獲。

因此,您必須從串行端口捕獲數據並將其存儲在緩沖區中。 然后計時器將從緩沖區中獲取數據。

如果這不是您的問題,請告訴我們更多。

讀取串行端口不是確定的。 您正在執行讀取功能時,端口中可能沒有數據。 您是否在實際執行讀取功能之前檢查是否有要讀取的數據?

在插入斷點的情況下,由於調試速度會有所不同,因此有時會看到數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM