Eventuali duplicati:
Getting Cross-thread operation not valid
Cross-thread operation not validoperazione cross-thread non valida durante l'ascolto di una porta COM
Sto cercando di ascoltare la porta COM in modo che creo nuovo gestore per evento SerialPort.DataReceived. La logica è semplice: scrivo qualcosa in TextBox1, premo Button1 e il mio testo dovrebbe mostrarlo in Label1. Ma la mia applicazione non vuole funzionare, perché genera l'errore "Cross thread operation not valid". Ho eseguito alcune ricerche e ho trovato l'oggetto Invoke: come posso utilizzarlo nel mio esempio? Perché devo includere la logica Invoke?
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: la porta COM qui è l'interfaccia seriale RS232. Nonostante USB e tutti ci sono ancora un certo numero di dispositivi (ad esempio GPS, medici) che utilizzano la porta seriale per la comunicazione PC. – Sesh
@_simon_: curioso: qual è la porta COM utilizzata in questa particolare applicazione? –
@_simon_: Ho aggiornato la mia risposta –