c# - 控件 X 从创建它的线程以外的线程访问
问题描述
我使用treager的OPC-UA SDK。我创建的变量是 PLC S7-1200
.
它在 Console.WriteLine 上显示了值,但我无法在 listView 上显示它
.
有人可以帮我显示 listView1 上的变量变化吗?
如果我注意到listView1.Items.Add(itm);
它会显示
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Opc.Ua.Client;
using Opc.UaFx;
using Opc.UaFx.Client;
namespace Test_OPC
{
public partial class OPCUA : Form
{
private readonly OpcClient client;
public static OpcValue isRunning;
string[] arr = new string[4];
ListViewItem itm;
public OPCUA()
: base()
{
this.client = new OpcClient("opc.tcp://192.168.1.200:4840");
InitializeComponent();
}
private void OPCUA_Load(object sender, EventArgs e)
{
client.Connect();
OpcSubscription subscription = client.SubscribeDataChange("ns=4;i=15",HandleDataChanged);
//ListViewItem listView1 = new ListViewItem();
//ListViewItem itemHienThi = new ListViewItem();
//Add Item vào ListView
arr[0] = "01";
arr[1] = "100";
arr[2] = "10";
itm = new ListViewItem(arr);
listView1.Items.Add(itm);
}
private void HandleDataChanged(object sender,OpcDataChangeReceivedEventArgs e)
{
OpcMonitoredItem item = (OpcMonitoredItem)sender;
//Add the attribute name/value to the list view.
arr[0] = item.NodeId.ToString();
arr[1] = e.Item.Value.ToString();
itm = new ListViewItem(arr);
listView1.Items.Add(itm);
Console.WriteLine("Data Change from NodeId '{0}': {1}",item.NodeId,e.Item.Value);
}
}
}
解决方案
推荐阅读
- node.js - Lambda 从 S3 读取 jpg/vector 文件并使用 graphicsmagick 处理它们
- angularjs - 创建需要执行两个相互依赖的嵌套休息调用的服务功能的最佳和最干净的方法是什么?
- scala - 导入不会在范围内带来隐含
- macros - 为什么这些看似等效的宏之一会失败?
- cucumber - Cucumber JVM:避免 Picocontainer 对未标记执行的功能进行依赖注入
- c# - 无法在 Visual Studio 中使用 dotnet run 命令运行代码。“找不到要运行的项目”
- java - JAVA - 具有特殊字符的 LDAP 密码不起作用
- json - 将 aws cli dynamodb json 响应转换为常规 json
- php - 使用 /start 命令通过 PHP 引用 Telegram bot
- android - OnItemSelectedListener Spinner 重新创建循环 - Android