2017-09-26 2 views
0

Ich möchte Serial Port Listener mit GUI erstellen. Ich versuche, empfangene Daten in textBox zu drucken. Wenn ich auf die Schaltfläche klicke, muss das Programm zuhören, alles funktioniert, aber druckt nicht in textBox. Hier ist EventHandler Code:C# - Serielle Schnittstelle Listening - So drucken Sie Daten in TextBox

void serialPortDataReceived(object sender, SerialDataReceivedEventArgs e) 
     { 
      SerialPort sp = (SerialPort)sender; 
      string indata = sp.ReadExisting(); 
      textBox1.AppendText(indata + "\r\n"); 
     } 

Und die Schaltfläche Code, der zu hören beginnt:

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(); 

etwas Hilfe brauchen :)

+0

Sie nicht UI vom DataReceivedEvent aktualisieren kann, ist es auf einem Worker-Thread gefeuert. Warum Sie keine InvalidOperationException erhalten, ist nicht offensichtlich, stellen Sie sicher, dass Sie sie nicht deaktiviert haben. –

+0

vielleicht müssen Sie mySerialPort.ReadTimeout ändern, übrigens standardmäßig 500 ms. vielleicht 500 ist nicht genug –

Antwort

0

können Sie RichTextBox wie folgt verwenden:

ersten Option:

RichTextBox1.Text += sp.ReadExisting() + "\n"; 

2. Option - Die zweite Option Delegat verwendet, können Sie eine Signatur der Methode sagen:

public delegate void AddDataDelegate(String myString); 
public AddDataDelegate myDelegate; 

private void Form1_Load(object sender, EventArgs e) 
{ 
    this.myDelegate = new AddDataDelegate(AddDataMethod); 
} 

public void AddDataMethod(String myString) 
{ 
    TextBox1.AppendText(myString); 
} 

private void SerialPortDataReceived(object sender, SerialDataReceivedEventArgs e) 
{ 
    SerialPort sp = (SerialPort)sender; 
    string s= sp.ReadExisting(); 

    TextBox1.Invoke(this.myDelegate, new Object[] {s});  
} 
Verwandte Themen