如何在Delphi中执行类似于C#Invoke()的操作?

如何在Delphi中执行类似于C#Invoke()的操作?,delphi,Delphi,我正在用Delphi写一个项目。我需要做一些事情来完成C#中的Invoke方法所做的功能。我在某处看到了Synchronize()方法,但我不知道该如何编写它。我怎么做 C#代码: 专用无效ListenerOnDataTransmit(DataTransmitEventArgs e) { TransmittedMg=位转换器.ToString(例如TransmittedBytes,0,例如TransmittedBytes.Length); //我想在这里写作 请尝试{Invoke(new Eve

我正在用Delphi写一个项目。我需要做一些事情来完成C#中的
Invoke
方法所做的功能。我在某处看到了
Synchronize()
方法,但我不知道该如何编写它。我怎么做

C#代码:

专用无效ListenerOnDataTransmit(DataTransmitEventArgs e)
{
TransmittedMg=位转换器.ToString(例如TransmittedBytes,0,例如TransmittedBytes.Length);
//我想在这里写作
请尝试{Invoke(new EventHandler(updateTransmistedMessageListView));}
捕获{}
}
//UpdateTransmittedMessageListView
public void updateTransmittedMessageListView(对象发送者,事件参数e)
{
ListViewItem项=新的ListViewItem(DateTime.Now.ToLongTimeString());
项目.子项目.添加(传输DMSG);
lvTransmittedMessages.Items.Insert(0,item);
如果(lvTransmittedMessages.Items.Count>100)
lvTransmittedMessages.Items.Clear();
}
公共表格(
{
初始化组件();
plistener.OnDataTransmit+=新的数据传输端口(ListenerOnDataTransmit);
}
代码是这样的,我想在第一个函数的
Invoke
行上执行操作。

在C#中,
Invoke()
方法“在拥有控件底层窗口句柄的线程上执行委托”

在Delphi中,UI控件(应该)由主UI线程拥有。您可以使用或方法在主UI线程的上下文中从工作线程执行代码,例如:

类型
TWorkerThread=类(TThread)
私有的
FData:字符串;
程序更新;
受保护的
程序执行;推翻
结束;
过程TWorkerThread.Execute;
开始
...
FData:=。。。;
同步(双更新);
...
结束;
程序TWorkerThread.DoUpdate;
变量
项目:技术指标;
开始
Item:=MyForm.lvTransmittedMessages.Items.Add;
项目说明:=DateTimeToStr(现在);
项目.子项目.添加(FData);
如果MyForm.lvTransmittedMessages.Items.Count>100,则
MyForm.lvTransmittedMessages.Items.Clear;
结束;
或者:

procedure SomeWorkerThreadProc;
变量
s:字符串;
开始
s:=。。。;
TThread.Synchronize(nil,
程序
变量
项目:技术指标;
开始
Item:=MyForm.lvTransmittedMessages.Items.Add;
项目说明:=DateTimeToStr(现在);
项目。子项目。添加;
如果MyForm.lvTransmittedMessages.Items.Count>100,则
MyForm.lvTransmittedMessages.Items.Clear;
结束
);
结束;

您是正确的,您可以调用
Synchronize
来调用主线程上的代码。我应该将什么作为参数写入Synchronize()方法?您需要传递一个方法或anon,该方法或anon捕获您希望在主线程上发生的任何事情。我不知道那是什么。