NativeXml和线程

时间:2011-04-12 12:17:14

标签: xml delphi nativexml

我试图让这个库与线程一起工作,但是我无法使用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; 

1 个答案:

答案 0 :(得分:8)

没有将结果返回主线程或在此行获取访问冲突?

ADoc:= ADoc.Create(formMain);

这一行代码包含一个错误和一个code smell:代码气味是你从一个帖子那里得到formMain。问题是你没有在类名上调用.Create(),而是在变量名本身上调用!你可能想要:

ADoc := TNativeXml.Create(nil);