Я хочу обновить показания значения из регистра устройства Modbus, затем отображать на Windows Формы каждые секунды. Вот тот код, который я сделал с помощью C#
private void button1_Click(object sender, EventArgs e)
{
try
{
RTU2();
}
catch (Exception ex)
{
MessageBox.Show(ex.StackTrace, "Error");
}
// Console.ReadKey();
}
public void RTU2()
{
using (SerialPort port = new SerialPort("COM7"))
{
ThreadPool.QueueUserWorkItem(new WaitCallback((obj) =>
{
// configure serial port
port.BaudRate = 19200;
port.DataBits = 8;
port.Parity = Parity.None;
port.StopBits = StopBits.One;
port.Open();
while (true)
{
{
// create modbus master
ModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port);
byte slaveId = 1;
int startua1 = int.Parse(txtUA1.Text.Trim(), System.Globalization.NumberStyles.HexNumber);
ushort startAddressua1 = (ushort)startua1;
// read large value in two 16 bit chunks and perform conversion
Thread.Sleep(100); // Delay 100ms
ushort[] registersua = master.ReadHoldingRegisters(slaveId, startAddressua1, 2);
float UAV = (float)(decimal)valueua / 100000;
//DISPLAY VALUE ON FORM
UA.Text = UAV.ToString("###,###.00");//'Cross-thread operation not valid: Control 'UA' accessed from a thread other than the thread it was created on.'
Thread.Sleep(2000); // Delay 20ms
}
}
}));
}
Однако, это была ошибка, подобная этой.
Пожалуйста, помогите мне, как мне правильно отредактировать этот код, Спасибо