Powiel możliwe:
Getting Cross-thread operation not valid
Cross-thread operation not validoperacja Cross wątek nie ważne podczas słuchania do portu COM
Staram się słuchać do portu COM, tak aby utworzyć nowy moduł obsługi dla zdarzenia SerialPort.DataReceived. Logika jest prosta - piszę coś do TextBox1, wciskam Button1, a mój tekst powinien pokazywać się w Label1. Ale moja aplikacja nie chce uruchomić, ponieważ spowoduje błąd "Niepoprawna operacja wątku". Zrobiłem kilka wyszukiwania i znalazłem obiekt Invoke - w jaki sposób mogę go użyć w moim przykładzie? Dlaczego muszę uwzględnić logikę 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: Port COM to interfejs szeregowy RS232. Pomimo USB i wszystkich wciąż istnieje wiele urządzeń (np. GPS, Medical), które wykorzystują port szeregowy do komunikacji z komputerem. – Sesh
@_simon_: Po prostu ciekawy: jaki port COM jest używany w tej konkretnej aplikacji? –
@_simon_: Zaktualizowałem moją odpowiedź –