簡體   English   中英

C#:SerialPort類和線程

[英]C# : SerialPort class and Threading

目前,我正在使用SerialPort類與我的設備進行通信。 為了改善用戶體驗,我創建了一個可以終止正在進行的通信的線程。 但是,當我在線程中啟動以下代碼時,我將從(SerialPort)port_.Read指令接收的數據實際上與在Write指令中使用的數據相同(看起來我無法與讀寫緩沖區)。如果我不將其放入新線程,則該代碼有效。 那么為什么會發生這種情況,我一次只能進行一次通訊,因此無法同時在緩沖區中寫入2個命令。

commTmr是一個計時器,它將在一定時間后停止while循環。

Thread.Sleep是為了確保可以在緩沖區中讀取接收到的數據(如果沒有它,我很難讀取)

while ((commTmr.timedout == false) && (port_.BytesToRead < threshold))
{
    if (commTmr.TimeElapsed().TotalSeconds > trigg)
    {
        port_.Write(sentData_, 0, nbBytesSend);
        trigg+=0.3;
    }

}

if (commTmr.timedout == true)
{
    return false;
}

else if (!(port_.BytesToRead < threshold))
{
    Thread.Sleep(100);
    port_.Read(receivedData_, 0, nbBytesRead);
}    

文檔指出:

不保證任何實例成員都是線程安全的。

所以我的猜測是,如果您想使用多個線程,則必須使用例如鎖將它們同步,以確保它們不會同時訪問端口。

暫無
暫無

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

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