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);
コメント