NativeXml и многопоточность - PullRequest
1 голос
/ 12 апреля 2011

Я пытаюсь заставить эту библиотеку работать с потоком, но я не могу вернуть результат в основной поток с помощью syncronize.

Нет проблем при создании xml в методе excute.

Кто-то использовал это?


   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 Ответ

8 голосов
/ 12 апреля 2011

Не вернуть результат в основной поток или получить нарушение прав доступа в этой строке?

ADoc:= ADoc.Create(formMain);

Эта строка содержит одну ошибку и один запах кода : кодзапах в том, что ты намекаешь на formMain из потока.Ошибка в том, что вы вызываете не .Create() для имени класса, а для самого имени переменной!Вы, вероятно, хотели:

ADoc := TNativeXml.Create(nil);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...