Possible en double:
Getting Cross-thread operation not valid
Cross-thread operation not validopération de la Croix-fil non valide tout en écoutant un port COM
Je suis en train d'écouter le port COM pour que je créer un nouveau gestionnaire pour l'événement SerialPort.DataReceived. La logique est simple - j'écris quelque chose à TextBox1, j'appuie sur Button1 et mon texte devrait le montrer dans Label1. Mais mon application ne veut pas fonctionner, car elle provoque une erreur d'opération 'Cross thread operation not valid'. J'ai fait quelques recherches et trouvé l'objet Invoke - comment puis-je l'utiliser dans mon exemple? Pourquoi ai-je besoin d'inclure la logique 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: Le port COM est l'interface série RS232. Malgré l'USB et tout ce qu'il y a encore un certain nombre de dispositifs (par exemple, GPS, Medical) qui utilisent le port série pour la communication PC. – Sesh
@_simon_: Juste curieux: à quoi sert le port COM dans cette application particulière? –
@_simon_: J'ai mis à jour ma réponse –