У меня есть следующая программа на C# с кнопкой GetForceButton и многострочным текстовым полем ForceTextbox. Вот код, у меня есть на данный момент:Непрерывное чтение последовательных данных в текстовое поле
public Form1()
{
InitializeComponent();
System.ComponentModel.IContainer components = new System.ComponentModel.Container();
serialPort1 = new System.IO.Ports.SerialPort(components);
serialPort1.PortName = "COM7";
serialPort1.BaudRate = 9600;
serialPort1.DtrEnable = true;
serialPort1.Open();
serialPort1.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
}
bool buttonpressed = false;
public void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadLine();
if (buttonpressed == true)
{
ForceTextbox.Text = indata + "\n";
}
else
{
ForceTextbox.Text = "No data received";
}
}
private void GetForceButton_Click(object sender, EventArgs e)
{
buttonpressed = true;
}
Когда я пошагово код, входные данные, получает значение из SerialPort в «0,00 \ г» (в том числе речевых скобок).
После перехода на ForceTextbox.Text = indata + "\ n"; line, исключение вызывается, говоря:
Необработанное исключение типа «Исправление System.InvalidOperationException» произошло в System.Windows.Forms.dll. Дополнительная информация: Неверная операция поперечного потока: Control 'ForceTextbox', доступ к которому осуществляется из потока, отличного от потока, на котором он был создан.
Что это значит или что я делаю неправильно, пожалуйста?
Если я вытащил строки «ForceTextbox.Text» и заменил их «Messagebox.Show», тогда все будет работать. Есть ли что-то не так с тем, как я называю «ForceTextbox» для записи на ??? –