我试图让这个库与线程一起工作,但是我无法使用syncronize将结果返回给主线程。
在excute方法中创建xml没问题。
有人用过吗?
TMyThread = class(TThread)
private
ADoc : TNativeXml;
protected
procedure Execute; override;
procedure DoProgress;
public
constructor Create(CreateSuspended: Boolean);
end;
{ TMyThread }
constructor TMyThread.Create(CreateSuspended: Boolean);
begin
inherited;
end;
procedure TMyThread.DoProgress;
begin
formMain.meminfo.Lines.Add(ADoc.WriteToString);
end;
procedure TMyThread.Execute;
var i,j : integer;
begin
inherited;
begin
ADoc:= ADoc.Create(formMain);
try
Adoc.XmlFormat := xfReadable;
ADoc.LoadFromFile('test.xml');
Synchronize(DoProgress);
finally
FreeAndNil(ADoc);
end;
end;
end;
答案 0 :(得分:8)
没有将结果返回主线程或在此行获取访问冲突?
ADoc:= ADoc.Create(formMain);
这一行代码包含一个错误和一个code smell:代码气味是你从一个帖子那里得到formMain
。问题是你没有在类名上调用.Create()
,而是在变量名本身上调用!你可能想要:
ADoc := TNativeXml.Create(nil);