2012-03-08 2 views
2

У меня проблема. Я пытаюсь слушать последовательный порт (COM20), а затем я получаю данные, я хочу добавить эти данные в ListBox1 в форме приложения. Какой код мне нужно добавить? Я знаю об INVOKE, но я не понимаю, как я должен его использовать. Помоги мне, пожалуйста.Прослушивание последовательного порта. как добавить строку в список?

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
using System.IO.Ports; 

namespace test_com_port 
{ 
    public partial class Form1 : Form 
    { 


     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      SerialPort mySerialPort = new SerialPort("COM20"); 
      mySerialPort.BaudRate = 9600; 
      mySerialPort.Parity = Parity.None; 
      mySerialPort.StopBits = StopBits.One; 
      mySerialPort.DataBits = 8; 
      mySerialPort.Handshake = Handshake.None; 



      mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); 
      mySerialPort.Open(); 

     } 
     private static void DataReceivedHandler(object sender,SerialDataReceivedEventArgs e) 
     { 
      SerialPort sp = (SerialPort)sender; 
       string indata = sp.ReadExisting(); 


     char[] values = indata.ToCharArray(); 
     foreach (char letter in values) 
     { 

      int value = Convert.ToInt32(letter); 
      string hexOutput = String.Format("{0:X}", value); 
      listBox1.Items.Add(hexOutput); 


     } 

     } 

    } 


    } 

ответ

4

Просто добавьте добавить в верхней части вашего обработчика событий:

if (InvokeRequired) 
BeginInvoke(new SerialDataReceivedEventHandler(DataReceivedHandler), sender, e);