2014-09-19 51 views
0

我需要在傳入流量的串行端口上「監聽」,並對其進行處理。但是當用戶點擊一個按鈕時,我需要將數據寫入該串行端口。中止從串行讀取以開始寫入?

對於讀取傳入的消息,我使用ReadByte()而沒有超時。當我設置Timout時,當沒有角色出現時會發生異常(大多數情況下會發生這種情況!)。

但是這個「阻塞」串口。現在我不能在其他線程(執行按鈕單擊事件的線程)寫入它。我目前的解決方案是殺死嘗試讀取數據然後開始向其中寫入數據的線程。

我知道這不是一個好方法,但我還能做什麼

我正在嘗試爲我的移動調制解調器創建一個AT Commands gui應用程序。

+2

不應該有什麼阻止你,而從它在另一個讀從一個線程寫入到一個端口 - 這是做一個完全正常的事情。 – 2014-09-19 21:50:45

+1

典型的串口是全雙工的,可以同時發送和接收。要利用這一點,您需要使用多線程或使用系統調用來實現非阻塞(又名異步)I/O或使用** select()**來確定何時可以執行I/O而不被阻塞。 – sawdust 2014-09-20 01:05:41

回答

2

在使用ReadByte()之前,請檢查緩衝區中是否有字符等待。請注意,我特別尋找10個字符。

他們的方式我目前做的是:

int datalen = serialPort1.BytesToRead; 
label1.Text="Readexisting"; 
if (datalen >=10) 
{ 
    string data = serialPort1.ReadExisting(); 
    label1.Text=data; 
}