Delphi/C++Builder Thread で TXMLDocument を使う
スレッド内で TXMLDocument は使えません。例外が発生します
Synchronize を利用して、メインスレッドで動かしてちょ。という事のようです。
関数内の途中だけ、メインスレッドに持ってこれて、可視性も良いじゃん
変数も一部(for の I はローカル変数じゃないとNG)を除いて、そのまま使えるし~
Synchronize を利用して、メインスレッドで動かしてちょ。という事のようです。
XMLDoc := TXMLDocument.Create(Application.MainForm); try XMLDoc.LoadFromXML(AXmlData); // ←ココで例外発生 XmlNode := XMLDoc.DocumentElement; for I := 0 to XmlNode.ChildNodes.Count - 1 do begin // ... end; finally XMLDoc.Free; end;
ということで無名メソッド(匿名メソッド)とSynchronizeで
Synchronize(
procedure()
var I: Integer;
begin
XMLDoc := TXMLDocument.Create(Application.MainForm);
try
XMLDoc.LoadFromXML(AXmlData);
XmlNode := XMLDoc.DocumentElement;
for I := 0 to XmlNode.ChildNodes.Count - 1 do begin
// ...
end;
finally
XMLDoc.Free;
end;
end);
コメント