【发布时间】:2018-10-04 15:46:16
【问题描述】:
我想将项目添加到 Modbus_request_event 中的 listBox1。我已经完成了为这个问题提供的解决方案并使用 MethodInvoker Delegate 修改了代码,但它仍然不会将项目添加到 listBox1。 这是我的代码
public void Modbus_Request_Event(object sender, ModbusSlaveRequestEventArgs e)
{
//disassemble packet from master
byte fc = e.Message.FunctionCode;
byte[] data = e.Message.MessageFrame;
byte[] byteStartAddress = new byte[] { data[3], data[2] };
byte[] byteNum = new byte[] { data[5], data[4] };
short StartAddress = BitConverter.ToInt16(byteStartAddress, 0);
short NumOfPoint = BitConverter.ToInt16(byteNum, 0);
string fc1 = Convert.ToString(fc);
string StartAddress1 = Convert.ToString(StartAddress);
string NumOfPoints1 = Convert.ToString(NumOfPoint);
/*Adds the items to listBox1*/
Invoke(new MethodInvoker(delegate () { listBox1.Items.Add(fc1); listBox1.Items.Add(StartAddress1); listBox1.Items.Add(NumOfPoints1); }));
//it runs infinitely not able to add to listbox//
}
谁能帮我解决这个问题?
【问题讨论】:
-
这不是重复的.. 仔细阅读(检查代码)...
Modbus_Request_Event是您的表单方法? -
当用户单击表单中的按钮以接受来自 Modbus Master 的请求时,将调用 Modbus_Request_Event 方法。在此方法中,在从 master 的请求中分解数据包后,我想添加一些这些变量到 listBox1.So 任何人都可以帮我解决这个问题吗?
-
我添加了一个可能有帮助的答案。
-
@J.vanLangen 它是重复的。仅当尝试从另一个线程修改 UI 时才会引发此类异常。不知何故,在某个地方,OP 正试图从不同的线程修改 UI。
标签: c# winforms modbus-tcp