Mögliche Duplizieren:
Getting Cross-thread operation not valid
Cross-thread operation not validCross-Thread-Betrieb nicht gültig, während an einen COM-Port lauscht
Ich versuche, COM-Port zu hören, so dass ich neue Handler erstellen für SerialPort.DataReceived-Ereignis. Die Logik ist einfach - ich schreibe etwas in TextBox1, drücke Button1 und mein Text sollte sich selbst in Label1 zeigen. Aber meine Anwendung möchte nicht ausgeführt werden, weil sie den Fehler 'Cross thread operation not valid' verursacht. Ich habe etwas gesucht und Invoke Objekt gefunden - wie kann ich es in meinem Beispiel verwenden? Warum muss ich Invoke Logik hinzufügen?
namespace WindowsApplication1
{
public partial class Form1 : Form
{
SerialPort sp = new SerialPort();
public Form1()
{
InitializeComponent();
sp.DataReceived += MyDataReceivedHandler;
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void MyDataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
try
{
//sp.PortName = "COM3";
//sp.Open();
Label1.Text = sp.ReadLine();
}
catch (Exception exception)
{
RichTextBox1.Text = exception.Message + "\n\n" + exception.Data;
}
finally
{
sp.Close();
}
}
private void button1_Click(object sender, EventArgs e)
{
try
{
sp.PortName = "COM3";
sp.Open();
sp.WriteLine(TextBox1.Text);
}
catch (Exception exception)
{
RichTextBox1.Text = exception.Message + "\n\n" + exception.Data;
}
finally
{
sp.Close();
}
}
}
}
@ Peter: COM-Port ist hier die serielle RS232-Schnittstelle. Trotz USB und allem gibt es immer noch eine Reihe von Geräten (z. B. GPS, Medical), die den seriellen Anschluss für PC-Kommunikation verwenden. – Sesh
@_simon_: Nur neugierig: Was ist der COM-Port für diese spezielle Anwendung verwendet? –
@_simon_: Ich habe meine Antwort aktualisiert –