2011-08-27 69 views
0
while (true) 
{ 
serialPort1.DataReceived += new SerialDataReceivedEventHandler(port1_DataReceived); 
} 
private void port1_DataReceived(object sender, SerialDataReceivedEventArgs e) 
{ 
    Thread.Sleep(1); 
    byte DATA = Convert.ToByte(serialPort1.ReadByte()); 
    Console.WriteLine(DATA); 
    //MessageBox.Show(Convert.ToString(DATA)); 
} 

我可以看到控制檯串行數據,但我不知道如何處理這些數據,並顯示在textBox中等等 什麼是我的代碼SerialDataReceivedEventHandler;

+0

任何人都對此while循環感到困惑?看看OP的上一個問題:http://stackoverflow.com/questions/7200397/c-serial-port-data-read-hang-problem –

回答

0

使用Convert.ToBase64String()方法失蹤。此方法將字節數組轉換爲Base64字符串。

編輯:

@Muhammad阿什拉夫:問題不是字節數據,問題是線程處理。

是這是跨線程問題。您可以使用Invoke方法。

private void port1_DataReceived(object sender, SerialDataReceivedEventArgs e) 
{ 
    Thread.Sleep(1); 
    byte DATA = Convert.ToByte(serialPort1.ReadByte()); 
    String data=Convert.ToString(DATA); 

    if (textBox1.InvokeRequired) 
    { 
    textBox1.Invoke(new Action(() => { textBox1.Text = data; })); 
    } 
} 
+0

實際上,DATA在字節DATA中。我可以使用字節數組,但我不知道字節數據將如何返回到主程序。 –

+0

有誰可以告訴我如何從SerialDataReceivedEventHandler讀取數據; –

+0

當我將數據傳入到serialeventhandler中的textBox中時它說線程問題 –

2

除了@adatapost答案:

拳:

while(true) 
{ 
    serialPort1.DataReceived += new SerialDataReceivedEventHandler(port1_DataReceived); 
} ???!! 

希望這是錯誤的複製/粘貼,導致訂閱事件無限循環while

第二:不清楚你想在屏幕上看到看到

如果只是符號的第一個答案是非常合適的,如果不是你應該讀你的設備文件(打印機,票據計數器,RFID閱讀器..不管)對待這些字節。

希望這會有所幫助。

+0

該循環以按鈕單擊開始,並且我也在此while循環中向設備發送查詢,並且該設備正確回覆了我,我已在控制檯上進行了檢查。我只是把這個數據顯示在TextBox上。 –

+0

@Muhamad Ashraf:你的字節數據只是數字/符號,所以你希望用戶在屏幕上看到什麼? – Tigran

+0

用戶希望在文本框上看到這些數據字節。實際上設備在單個查詢中發送大約50字節。 –

相關問題