我正在使用IdTCPClient和IdThreadComponent来获取条形码阅读器的一些信息。这段代码,经过一些修改,可以在Delphi 11和Indy 10中使用,但不能在Delphi 2007和Indy 9中使用:
procedure TPkgSendF1.IdThreadComponent1Run(Sender: TIdCustomThreadComponent);
var
s: String;
begin
s := IdTCPClient1.ReadLn('&', 20000, 1500);
TThread.Queue(nil, procedure // <== Expected @ but received PROCEDURE
begin
ProcessRead(s);
end);
end;
// [DCC Error] PkgSendF1.pas(239): E2029 Expression expected but 'PROCEDURE' found
procedure TPkgSendF1.ProcessRead(AValue: string);
begin
Memo1.Text := AValue;
end;
如果我不使用TThread.Queue,我会错过一些阅读。我将感谢任何帮助。弗朗西斯科阿尔瓦拉多
1条答案
按热度按时间eblbsuwk1#
匿名方法在 Delphi 2007中还不存在,它们是在Delphi 2010中引入的。因此,D2007中的
TThread.Queue()
只有一个版本接受TThreadMethod
:这意味着您需要将对
ProcessRead()
的调用 Package 在一个helper对象中,该对象包含一个不带参数的procedure
,例如:仅供参考,Indy(9和10)在
IdSync
单元中有一个异步的TIdNotify
类,您可以使用它来代替直接使用TThread.Queue()
,例如: