'Cannot capture symbol' 用于 Synchronize() 中的本地过程
'Cannot capture symbol' for local procedure in Synchronize()
下面代码中的两个构造都给出错误 E2555 无法捕获符号 WriteToXMLFile
这是为什么?
我在匿名proc中尝试使用AParameter时也有类似的警告,使用本地解决了
'lParameter := AParameter',所以我认为本地 proc 也可以工作....
由于 WriteToXMLFile 包含我不想复制的代码,定义它的正确位置在哪里?
procedure DoStuff(AParameter: Integer);
procedure WriteToXMLFile;
begin
// ...
end;
begin
(* 1 *)
if GetCurrentThreadID= MainThreadID then
WriteToXMLFile
else
TThread.Synchronize(nil,WriteToXMLFile);
(* 2 *)
if GetCurrentThreadID= MainThreadID then
WriteToXMLFile
else
TThread.Synchronize(nil,procedure
begin
WriteToXMLFile;
end);
end;
编译器不支持在匿名方法中使用嵌套过程。
而是将嵌套过程改成匿名方法:
procedure DoStuff(AParameter: Integer);
function CaptureWriteToXMLFile : TThreadProcedure;
begin
Result :=
procedure
begin
// Code here ...
end;
end;
var
WriteToXMLFile : TThreadProcedure;
begin
WriteToXMLFile := CaptureWriteToXMLFile();
if GetCurrentThreadID= MainThreadID then
WriteToXMLFile
else
TThread.Synchronize(nil,WriteToXMLFile);
end;
匿名函数returns一个TThreadProcedure
。局部变量被分配了一个生成的匿名方法,该方法可以作为参数传递给 Syncronize
过程。
下面代码中的两个构造都给出错误 E2555 无法捕获符号 WriteToXMLFile
这是为什么?
我在匿名proc中尝试使用AParameter时也有类似的警告,使用本地解决了 'lParameter := AParameter',所以我认为本地 proc 也可以工作....
由于 WriteToXMLFile 包含我不想复制的代码,定义它的正确位置在哪里?
procedure DoStuff(AParameter: Integer);
procedure WriteToXMLFile;
begin
// ...
end;
begin
(* 1 *)
if GetCurrentThreadID= MainThreadID then
WriteToXMLFile
else
TThread.Synchronize(nil,WriteToXMLFile);
(* 2 *)
if GetCurrentThreadID= MainThreadID then
WriteToXMLFile
else
TThread.Synchronize(nil,procedure
begin
WriteToXMLFile;
end);
end;
编译器不支持在匿名方法中使用嵌套过程。
而是将嵌套过程改成匿名方法:
procedure DoStuff(AParameter: Integer);
function CaptureWriteToXMLFile : TThreadProcedure;
begin
Result :=
procedure
begin
// Code here ...
end;
end;
var
WriteToXMLFile : TThreadProcedure;
begin
WriteToXMLFile := CaptureWriteToXMLFile();
if GetCurrentThreadID= MainThreadID then
WriteToXMLFile
else
TThread.Synchronize(nil,WriteToXMLFile);
end;
匿名函数returns一个TThreadProcedure
。局部变量被分配了一个生成的匿名方法,该方法可以作为参数传递给 Syncronize
过程。