我有一个后台线程向主线程发送消息,反过来,它将消息添加到TListBox,如日志.
事实是,这个后台线程非常快,我真的不需要快速更新日志.我想将消息添加到TStringList并设置一个计时器来每秒更新TListBox.
我尝试过使用:
listBox1.Items := StringList1;
Run Code Online (Sandbox Code Playgroud)
要么
listBox1.Items.Assign(StringList1);
Run Code Online (Sandbox Code Playgroud)
在OnTimer事件中,它的工作原理.事实是,它永远不会让用户真正滚动或点击列表框,因为它每秒刷新一次.
我正在使用Delphi XE4
是否有更优雅的方式将列表框的内容与此背景StringList(或必要时的任何其他列表)同步?先感谢您!
我正在一个单线程OPC客户端程序中工作,该程序管理连接到同一OPC服务器的3个不同的西门子PLC,也是西门子的.
单线程客户端看起来像这样:
loop
begin
processPLC1;
processPLC2;
processPLC3;
end;
Run Code Online (Sandbox Code Playgroud)
每个processPLC过程都会调用底层OPC库,例如:
OPCutils.WriteOPCGroupItemValue(FGroupIf, FHandleItemOpc, Value);
Run Code Online (Sandbox Code Playgroud)
好的,现在我想在不同的线程中调用每个processPLC并且并行工作.
我做了一些研究,并使用OmniThreadLibrary开始了一些代码,但我不认为OPC代码是多线程安全的.是吗?
我应该使用task.Invoke或类似的东西吗?ReadOPC函数怎么样,返回PLC标签的值?这里最好的做法是什么?
谢谢!!!